java 实验5 接口多态 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五接口、多态与内部类
实验目标:
1、理解接口、塑型、多态的概念并能熟练应用;
2、熟练掌握接口的定义和使用;
3、深刻理解构造方法的调用顺序,理解编写时需要注意的问题;
4、了解并学会使用内部类
实验任务:
1、继承时的多态:目测给出下面代码的执行输出结果,并简单解释每一行输出的原因。
答:首先,该程序的主函数是Vehicle v=new Vehicle();即先声明并实例化一个汽车对象,而v.test();则是调用汽车的测试方法;而test方法里,Vehicle vc=new Car();是将上面的汽车指向了一个具体的小汽车对象;Bus vb=new Bus();将公共汽车指向了一个具体的公共汽车对象;drive();调用汽车的驾驶方法;vc.drive();调用小汽车的驾驶方法;vb.drive();调用公共汽车的驾驶方法;而vc.brake();vb.brake();则是直接调用汽车的刹车方法。因而运行结
果如下:
A new bus.
Vehicle is driven
Car is driven
Bus is driven
Vehicle is braked
Vehicle is braked
2.针对下面的简单的类图,从面向对象的角度,将Instrument定义成接口,应怎样实现。编写能完成如图功能的程序,并再编写一个简单的应用程序进行多态性测试。(参考例子5-9;实验4该题是要求用抽象类来实现,在此要求用接口实现,还要进行多态性测试)
说明:Instrument表示乐器、Wind表示管乐器、Percussion敲击乐器、Stringed表示弦乐器、Woodwind表示木管乐器、Brass表示铜管乐器。
要求:(1)Instrument为接口,Wind为抽象类,其他为普通类。这里测试的目的是:我们知道当一个普通类实现一个接口时,必须实现该接口的全部方法,但当这个类是抽象类时,我们还需要实现该接口全部方法吗?如果不需要实现?那么是否直接不理这个方法就一,还是要将这个方法在自己类内部再标记一次为抽象方法。(听起来有点晕,测试很简单的,有时百读不如一试)
(2)请编写测试代码,对实现Instrument接口的各个类进行多态测试,具体可参考课本例子。所谓多态测试就是向上自动塑型,以及向下动态绑定,而动态绑定的基本规则是实例方法“由下往上”寻找绑定,类方法和类属性成员“由上往下”寻找绑定。(对其概念不清晰的请留意课本知识与课堂讲解)
该题代码如下:
package zi;
interface Instrument {
void play();
String what();
void adjust();
}
abstractclass Wind implements Instrument { publicvoid play() {
System.out.println("Wind.play()");
}
publicabstract String what() ;
publicvoid adjust() {
System.out.println("Wind.adjust");
}
}
class Percussion implements Instrument { publicvoid play() {
System.out.println("Percussion.play()");
}
public String what() {
return"Percussion.play()";
}
publicvoid adjust() {
System.out.println("Percussion.adjust()"); }
}
class Stringed implements Instrument { publicvoid play() {
System.out.println("Stringed.play()");
}
public String what() {
return"Stringed.play()";
}
publicvoid adjust() {
System.out.println("Stringed.adjust()"); }
}
class Brass extends Wind {
publicvoid play() {
System.out.println("Brass.play()");
}
public String what() {
return"Brass.play()";
}
publicvoid adjust() {
System.out.println("Brass.adjust()");
}
}
class Woodwind extends Wind {
publicvoid play() {
System.out.println("Woodwind.play()");
}
public String what() {
return"Woodwind.play()";
}
publicvoid adjust() {
System.out.println("Woodwind.adjust()");
}
}
publicclass Ex5_2 {
publicstaticvoid main(String[] args) {
Instrument i2,i3,i4,i5;
// i1 = new Wind();
//i1.play();
i2 = new Percussion();
i2.play();
i3 = new Stringed();
i3.play();
i4 = new Brass();
i4.play();
i5 = new Woodwind();
i5.play();
}
}
其执行结果如下图所示:
该程序的uml图截图如下: