java 实验5 接口多态 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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图截图如下:

相关文档
最新文档