搜索
您的当前位置:首页正文

实验四 、类的继承与多态

来源:尚佳旅游分享网


实验四 类的继承与多态

一、实验目的

1. 理解类的继承概念和类的继承规则。根据实际需要正确的运用类的继承。

2. 理解类的多态概念,掌握子类对父类方法的重新定义 ,理解方法的匹配调用原则 。

二、实验内容

1.模拟编写程序,理解类的继承、多态、继承和多态规则。

2. 独立编程,实现类的继承和多态。

三、实验过程

(一)继承

(1)模拟编写程序,理解类的继承,继承规则。

请编码实现动物世界的继承关系:

(1)动物(Animal)具有行为:吃(eat)、睡觉(sleep)。

(2)动物包括:兔子(Rabbit),老虎(Tiger)。

(3)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。

请通过继承实现以上需求,并编写测试类AnimalTest进行测试 。

1. 定义Animal类,代码如下:

public class Animal {

public void sleep(){

System.out.println(\"我正睡觉呢!\");

}

public void eat(){}

}

2. 定义Tiger类,代码如下:

public class Tiger extends Animal {

public void eat(){

System.out.println(\"我喜欢吃肉!\");

}

}

3. 定义Rabbit类,代码如下:

public class Rabbit extends Animal {

public void eat(){

System.out.println(\"我喜欢吃草和青菜!\");

}

}

4、定义AnimalTest类,代码如下:

public class AnimalTest {

public static void main(String[] args) {

Tiger tiger = new Tiger();

tiger.sleep();

tiger.eat();

System.out.println();

Rabbit rabbit = new Rabbit();

rabbit.sleep();

rabbit.eat();

}

}

5. 编译运行程序,查看运行结果。

(2)独立编程,实现继承

交通工具的类继承。

要点:类继承的实现

父类:Vehicles类,属性包括name 名称, color 颜色 seats座位,方法showDetail()(输出汽车名称)。

子类:car类

思路:

 Car类重写vehicle类(父类)方法showDetail(),其功能是(输出汽车名称、颜色信息)。

 Car类方法show()(座位的数量信息)输出汽车的属性值。

➢ 编写测试类VehiclesTest来测试,实用Car对象调用showDetail()和show()方法打印输出car的属性信息。(提示:类的设计 加上访问控制修饰符)

(二)多态

(1)模拟编写程序,理解类的多态。

案例需求:开在Teacher教员类的基础上,开发一个类代表总部,负责对各教员进行评估,评估内容包括教员的自我介绍以及教员的授课。

教师:Teacher教员类(教员姓名, 所在中心属性;授课方法和自我介绍方法),其中教员分为Java教员以及.NET教员,各自的要求如下:

1.Java教员

具有属性:姓名、所在中心。

具有方法:授课(授课的步骤依次是:打开Eclipse、实施理论课授课)、自我介绍。2.NET教员

具有属性:姓名、所在中心。

具有方法:授课(授课的步骤依次是:打开Visual Studio 2005、实施理论课授课)、自我介绍。

1. 定义Teacher类,代码如下:

class Teacher {

public String name; // 教员姓名

private String school;// 所在中心

public Teacher() {

}

// 构造方法中,对各属性赋予初始值

public Teacher(String myName,String mySchool) {

name = myName;

school = mySchool;

}

//授课方法

public void giveLesson() {

System.out.println(\"知识点讲解\");

System.out.println(\"总结提问\");

}

// 自我介绍

public void introduction() {

System.out.println(\"大家好!我是\" + school + \"的\" + name + \"。 }

}

2. 定义DotNetTeacher类,代码如下:

\");

public class DotNetTeacher extends Teacher {

public DotNetTeacher (String myName,String mySchool) {

super(myName,mySchool);// 调用父类的构造方法

}

public void giveLesson() {

System.out.println(\"打开Visual Studio 2005\");

super.giveLesson();

}

}

3. 定义JavaTeacher类,代码如下:

public class JavaTeacher extends Teacher {

public JavaTeacher (String myName,String mySchool) {

super(myName,mySchool);// 调用父类的构造方法

}

public void giveLesson() {

System.out.println(\"启动 Eclipse\");

super.giveLesson();

}

}4、定义PG3类,代码如下:

public class PG3 {

//对教员进行评估,评估内容:自我介绍、授课

public void judge(Teacher teacher){

teacher.introduction();

teacher.giveLesson();

}

public static void main(String[] args) {

PG3 hq = new PG3();

hq.judge(new JavaTeacher(\"李明\北京中心\"));

System.out.println();

hq.judge(new DotNetTeacher(\"张明\天津中心\"));

System.out.println();

hq.judge(new DBTeacher(\"李岚\北京中心\"));

}

}

5. 编译运行程序,查看运行结果。

(二)独立编程,实现类的多态

请编码实现如下需求:

(1)乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin)。

(2)各种乐器的弹奏( play )方法各不相同。

编写一个测试类InstrumentTest,要求:

(1)编写方法testPlay,对各种乐器进行弹奏测试。要依据乐器的不同,进行相应的弹奏。

(2)在main方法中进行测试。

思路:

(1)乐器Instrument为父类,钢琴(Piano)、小提琴(Violin)为子类;

(2)乐器类只有play()方法,钢琴(Piano) 子类和小提琴(Violin)子类有同名方法play()即重写父类乐器的play()方法。

三、思考题

1、 如何继承一个类?

2、 同名的不同方法共存的情况称为什么?如何区分这些同名方法?

3.子类重新定义与父类方法的方法头完全相同的方法,这种情况称为什么?

因篇幅问题不能全部显示,请点此查看更多更全内容

Top