当前位置:文档之家› 实验四 、类的继承与多态

实验四 、类的继承与多态

实验四类的继承与多态
一、实验目的
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、实施理论课授课)、自我
介绍。

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

具有方法:授课(授课的步骤依次是:打开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.子类重新定义与父类方法的方法头完全相同的方法,这种情况称为什么?。

相关主题