实验四 类的继承与多态
一、实验目的
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.子类重新定义与父类方法的方法头完全相同的方法,这种情况称为什么?
因篇幅问题不能全部显示,请点此查看更多更全内容