java实验5接口多态实验报告_第1页
java实验5接口多态实验报告_第2页
java实验5接口多态实验报告_第3页
java实验5接口多态实验报告_第4页
java实验5接口多态实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验五 接口、多态与内部类实验目标:1、 理解接口、塑型、多态的概念并能熟练应用;2、 熟练掌握接口的定义和使用;3、 深刻理解构造方法的调用顺序,理解编写时需要注意的问题;4、 了解并学会使用内部类实验任务:1、 继承时的多态:目测给出下面代码的执行输出结果,并简单解释每一行输出的原因。答:首先,该程序的主函数是Vehicle v=new Vehicle();即先声明并实例化一个汽车对象,而v.test();则是调用汽车的测试方法;而test方法里,Vehicle vc=new Car();是将上面的汽车指向了一个具体的小汽车对象;Bus vb=new Bus();将公共汽车指向了一个具体的

2、公共汽车对象;drive();调用汽车的驾驶方法;vc.drive();调用小汽车的驾驶方法;vb.drive();调用公共汽车的驾驶方法;而vc.brake();vb.brake();则是直接调用汽车的刹车方法。因而运行结果如下:A new bus.Vehicle is drivenCar is drivenBus is drivenVehicle is brakedVehicle is braked2.针对下面的简单的类图,从面向对象的角度,将Instrument定义成接口,应怎样实现。编写能完成如图功能的程序,并再编写一个简单的应用程序进行多态性测试。(参考例子5-9;实验4该题是要求用

3、抽象类来实现,在此要求用接口实现,还要进行多态性测试)说明:Instrument表示乐器、Wind表示管乐器、Percussion敲击乐器、Stringed表示弦乐器、Woodwind表示木管乐器、Brass表示铜管乐器。要求:(1)Instrument为接口,Wind为抽象类,其他为普通类。这里测试的目的是:我们知道当一个普通类实现一个接口时,必须实现该接口的全部方法,但当这个类是抽象类时,我们还需要实现该接口全部方法吗?如果不需要实现?那么是否直接不理这个方法就一,还是要将这个方法在自己类内部再标记一次为抽象方法。(听起来有点晕,测试很简单的,有时百读不如一试)(2)请编写测试代码,对实现

4、Instrument接口的各个类进行多态测试,具体可参考课本例子。所谓多态测试就是向上自动塑型,以及向下动态绑定,而动态绑定的基本规则是实例方法“由下往上”寻找绑定,类方法和类属性成员“由上往下”寻找绑定。(对其概念不清晰的请留意课本知识与课堂讲解)该题代码如下:package zi;interface Instrument void play(); String what(); void adjust();abstract class Wind implements Instrument public void play() System.out.println("Wind.pla

5、y()"); public abstract String what() ; public void adjust() System.out.println("Wind.adjust"); class Percussion implements Instrument public void play() System.out.println("Percussion.play()"); public String what() return "Percussion.play()" public void adjust() Sy

6、stem.out.println("Percussion.adjust()"); class Stringed implements Instrument public void play() System.out.println("Stringed.play()"); public String what() return "Stringed.play()" public void adjust() System.out.println("Stringed.adjust()"); class Brass exte

7、nds Wind public void play() System.out.println("Brass.play()"); public String what() return "Brass.play()" public void adjust() System.out.println("Brass.adjust()"); class Woodwind extends Wind public void play() System.out.println("Woodwind.play()"); public S

8、tring what() return "Woodwind.play()" public void adjust() System.out.println("Woodwind.adjust()"); public class Ex5_2 public static void main(String args) Instrument i2,i3,i4,i5; / i1 = new Wind(); /i1.play(); i2 = new Percussion(); i2.play(); i3 = new Stringed(); i3.play(); i4

9、= new Brass(); i4.play(); i5 = new Woodwind(); i5.play(); 其执行结果如下图所示:该程序的uml图截图如下:3编写程序,要求如下:(1)定义Biology(生物)、Animal(动物)和Mankind(人)3个接口;该题代码截图如下:以下为Biology(生物)的接口:以下为Animal(动物)的接口:以下为Mankind(人)的接口:(2)接口Biology声明breath()抽象方法;截图如下:(3)接口Animal继承Biology并声明move()和eat()抽象方法;其代码如下:interface Animals extends

10、 Biologyvoid breathe();void eat();void move();(4)接口Mankind继承Animal并声明study()和think()抽象方法,增加属性MaxAge;其代码如下:package zi;interface Biologyvoid breath();interface Animal extends Biologyvoid move();void eat();public interface Mankind extends Animalint MaxAge=150;void studty();void think();其UML图截图如下:(5)定义类

11、Man和Woman实现接口Mankind,实现它们声明的抽象方法,并增加属性,name,sex(类属性成员)和age;(具体实现可以只显示相应的提示信息就可以,如同书本例子一样);(6)在类Man和Woman中实现无参构造方法和有参构造方法两种不同的构造方法,有参构造方法输入自己姓名,自己年龄,在构造方法中如果年龄超出MaxAge则输出出错信息并修改成默认年龄。(7)编写测试类使用接口Mankind来测试类Man和Woman的多态性。(向上塑型和向下动态绑定)以上三小问的程序如下所示:package zi;public interface Mankind extends Animalint M

12、axAge=150;void study();void think();package zi;public class Man implements Mankind protected String name;static String sex="male"protected int age;public Man()this("某男",18);public Man(String name,int age)=name;if(age<=MaxAge)&&(age>0)this.age=age;elseSystem

13、.out.println("Age Wrong,Init 18");this.age=18;Overridepublic void move() / TODO 自动生成的方法存根System.out.println("Man's move");Overridepublic void eat() / TODO 自动生成的方法存根System.out.println("Man's eat");Overridepublic void breath() / TODO 自动生成的方法存根System.out.println(&q

14、uot;Man's breath");Overridepublic void study() / TODO 自动生成的方法存根System.out.println("Man's study");Overridepublic void think() / TODO 自动生成的方法存根System.out.println("Man's think");public String toString()return(name+","+sex+","+age);package zi;publ

15、ic class Woman implements Mankind protected String name;static String sex="female"protected int age;public Woman()this("某女",18);public Woman(String name,int age)=name;if(age<=MaxAge)&&(age>0)this.age=age;elseSystem.out.println("Age Wrong,Init 18")

16、;this.age=18;Overridepublic void move() / TODO 自动生成的方法存根System.out.println("Woman's move");Overridepublic void eat() / TODO 自动生成的方法存根System.out.println("Woman's eat");Overridepublic void breath() / TODO 自动生成的方法存根System.out.println("Woman's breath");Overridep

17、ublic void study() / TODO 自动生成的方法存根System.out.println("Woman's study");Overridepublic void think() / TODO 自动生成的方法存根System.out.println("Woman's think");public String toString()return(name+","+sex+","+age);package zi;public class Ex5_3 public static void

18、 main (String args) Mankind m1=new Man("张男",-2);Mankind m2=new Woman("李女",180);System.out.println(m1.toString();System.out.println(m2.toString();m1.breath();m2.breath();m1.move();m2.move();m1.study();m2.study();m1.think();m2.think();其UML图如下图所示:4.在第4章课后习题10的基础上(也是实验04的实验题),声明测试类完成

19、对多态性的测试,具体要求请参见课本171页第5章课后习题8。该题的测试类的代码如下:package zi;import java.text.*;public class Ex5_4public static void main(String args)Student student=new Student("2012001","张三",76.00f,80.00f,94.00f),new Student("2012002","李四",81.00f,85.00f,80.00f),new Student("20

20、12003","王五",91.00f,77.00f,75.00f),new StudentXW("2012004","林六",98.00f,87.00f,36.00f,"英语代表"),new StudentBZ("2012005","赵七",94.00f,85.00f,87.00f,"班长");for(int i=0;i<5;i+)System.out.println("学生名字:"+studenti.getname()

21、+"t评测成绩:"+new DecimalFormat("0.00").format(studenti.testScore();其运行结果如下:该程序的UML图截图如下:5、内部类:定义一个类Outer,类中拥有私有成员变量a和成员方法output( )。在这个类中定义一个内部类Inner,内部类中定义一个方法out( )修改外部类的成员变量a的值,并调用外部类的私有方法output( )。最后在外部类的公有静态main方法中调用内部类的方法。要求:测试使用两种方式来调用内部类方法,第一种,在外部类方法里面创建内部类对象,在main方法里面通过调用外部类

22、的方法来间接调用内部类方法;该题代码如下:package zi;public class Outer1private String a;public void output()System.out.println(a);class Innerpublic Inner()public void out(String b)a=b;output();public void run()Inner i1=new Inner();i1.out("a of Outer1 changed by Inner");public static void main(String args)Oute

23、r1 o1=new Outer1();o1.run(); 其运行结果如下图所示:其UML图截图如下:第二种,在main方法里面直接创建内部类对象,直接调用内部类方法该题代码如下:package zi;public class Outer2private String a;public void output()System.out.println(a);class Innerpublic Inner()public void out(String b)a=b;output();public void run()Inner i1=new Inner();i1.out("abcdefg"); public static void main(String args) Outer2 o2=new Outer2(); Outer2.Inner ii1=o2.new Inner();ii1.out("a of Outer2 by Inner"); 其执行结果图下图所示:该程序的UML图截图如下:6、(选做)匿名内部类:内部类可以声明在方法内部,甚至以匿名的形式声明在new关键字后,试着填充下面的代码,实现匿名的内部类。填充后代码如下:package zi;import java.u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论