Java程序设计-多态与接口_第1页
Java程序设计-多态与接口_第2页
Java程序设计-多态与接口_第3页
Java程序设计-多态与接口_第4页
Java程序设计-多态与接口_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、Java 程序设计实验四:继承、多态与接口1. 提交期限和方法期限:第 12 周周五( 2015-11-27) 23:59 pm方法: 由学习委员收集所有学生的实验报告, 以电子档的形式提交给任课教师 (发邮箱:9867941 )。2. 实验目的及要求掌握 Java 的基本数据类型、运算符、表达式和语句。运行环境: JDK1.7开发环境: Eclipse3. 实验内容及题目3.1 子类的继承与方法的重写【题 1 中国人与美国人】在 Eclipse 中创建名为 Lab4 的新项目,编写程序模拟中国人、 美国人、北京人。除主类外,程序中有4 个类: People、 ChinaPeople、 Ame

2、ricanPeople和 BeijingPeople 类。要求如下:( 1)People 类有权限是 protected 的 double 型成员变量: height 和 weight ,以及 public void speakHello( ) 、 public void averageHeight( ) 和 public void averageWeight( ) 方法。( 2 ) ChinaPeople 类是 People 类的子类,新增了 public void chinaGongfu( ) 方法。要求 ChinaPeople 重写父类的 public void speakHello (

3、)、 public void averageHeight( )和 public void averageWeight( ) 方法。( 3 ) AmericanPeople 类是 People 的子类,新增 public void americanBoxing( ) 方法。要求 AmericanPeople 重写父类的 public void speakHello( ) 、public void averageHeight( ) 和 public void averageWeight( ) 方法。Java 程序代码。( 4 ) BeijingPeople 类是 ChinaPeople 的子类,新

4、增 public void beijingOpera( ) 方法。要求 BeijingPeople 重写父类的 public void speakHello( ) 、 public void averageHeight( ) 和 public void averageWeight( ) 方法。运行效果如下图。按下列代码模板要求,将【代码】部分替换为部分代码已给出:/People.java public class Peopleprotected double weight, height;public void speakHello()System.out.println("yaya

5、yaya");public void averageHeight()height = 173;System.out.println("average height:" + height);public void averageWeight()weight = 70;System.out.println("average weight:" + weight);/ChinaPeople.javapublic class ChinaPeople extends People public void speakHello()System.out.pri

6、ntln(" 您好 ");public void averageHeight()height = 168.78;System.out.println(" 中国人平均身高 :" + height + " 厘米 ");/重写 public void averageWeight() 方法,输出: "中国人平均体重 :65 公斤 " /【代码 1】public void chinaGongfu()System.out.println(" 坐如钟,站如松,睡如弓 ");/AmericanPeople.ja

7、vapublic class AmericanPeople extends People /重写 public void speakHello() 方法,输出 "How do you do" /【代码 2】/重写 public void averageHeight() 方法,输出 "American's average height:176 cm"/【代码 3】public void averageWeight()weight = 75;System.out.println("American's average weight:

8、" + weight + " kg");public void americanBoxing()System.out.println(" 直拳、勾拳、组合拳 ");/BeijingPeople.javapublic class BeijingPeople extends ChinaPeople/重写 public void averageHeight() 方法,输出 " 北京人的平均身高 :172.5 厘米/【代码 4】/重写 public void averageWeight() 方法,输出 " 北京人的平均体重 :70

9、公斤 "/【代码 5】public void beijingOpera()System.out.println(" 花脸、青衣、花旦和老生 ");/Example.javapublic class Examplepublic static void main(String args)ChinaPeople chinaPeople = new ChinaPeople();AmericanPeople americanPeople = new AmericanPeople(); BeijingPeople beijingPeople = new BeijingPeop

10、le(); chinaPeople.speakHello(); americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight(); beijingPeople.averageHeight(); chinaPeople.averageWeight(); americanPeople.averageWeight(); beijingPeople.averageWeight(); chinaPeople.chinaGongfu(); ame

11、ricanPeople.americanBoxing(); beijingPeople.beijingOpera(); beijingPeople.chinaGongfu();【本题知识点】1. 子类的继承性;2. 子类对象的创建过程;3. 方法的继承与重写。【实验指导】1. 如果子类可以继承父类的方法,子类就有权利重写这个方法,子类通过重写父类的 方法可以改变方法的具体行为。2. 方法重写时一定要保证方法的名字、类型、参数个数和类型同父类的某个方法完全 相同,只有这样,子类继承的这个方法才被隐藏。3. 子类在重写方法时,不可以将实例方法更改成类方法,也不可以将类方法更改为实 例方法,即如果重

12、写的方法是 static 方法, static 关键字必须要保留;如果重写的方 法是实例方法,重写时不可以用 static 修饰该方法。【学生解答】(1)程序代码:【代码 1】 public void averageWeight()weight = 65;System. out .println(" 中国人平均体重 :" + weight+" 公斤 ");【代码 2】 publicvoid speakHello()System. out .println("How do you do");【代码 3】 publicvoid avera

13、geHeight()height = 176;System. out .println("American's average height:"+height+"cm");【代码 4】 publicvoid averageHeight()height = 172.5;System. out .println(" 北京人平均身高 :" + height + " 厘米 ");【代码 5】 publicvoid averageWeight()weight = 70;System. out .println(&qu

14、ot; 北京人平均体重 :" + weight+" 公斤 ");(2)运行结果截图:3.2 成员变量隐藏与 super 关键字【题 2 银行与利息】在 Lab4 项目中,编写程序。验证教材第 5章 81 页的【例 5-7】。 假设银行 Bank 已经有了按整年 year 计算利息的一般方法, 其中 year 只能取正整数。 如按整年计算的方法:Double compuerInterest() interest = year * 0.35 * savedMoney; return interest; 建设银行的天利息计算公式为: dayInterst = 天数 *

15、0.0001 * 存款数 大连银行的天利息计算公式为: dayInterst = 天数 * 0.00012 * 存款数参照例子中的建设银行或大连银行,再编写一个商业银行,让程序输出 8000 元存 在商业银行 8 年零 236 天的利息。【知识点】1. 成员变量隐藏和方法重写;2. super 关键字。【实验指导】1. 当 super 调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量 或继承的成员变量。2. 子类不继承父类的构造方法,因此,子类在其构造方法中需使用 super 来调用父类 的构造方法,而且 super 必须是子类构造方法中的头一条语句,即如果在在子类的 构造方法

16、中,没有明显地写出 super 关键字来调用父类的某个构造方法,那么默认 有“ super( );”。3. 类中定义多个构造方法时,建议包括一个不带参数的构造方法,以便子类可以省略“ super( );”。【学生解答】( 1)商业银行的程序代码: class Bankint savedMoney ;int year ; double interest ;public double computerInterest() interest = year *0.035* savedMoney ; return interest ; class BusinessBank extends Bankdou

17、ble year ;public double computerInterest() super . year = ( int ) year ; double remainNumber = year - ( int )year ; int day = ( int )( remainNumber *1000);interest = super .computerInterest()+ day *0.0001* savedMoney System. out .printf( "%d元存在商业银行 %d年零 %d天的利息: %.2f 元 n" , savedMoney , sup

18、er . year , day , interest );return interest ; public class Example5_2 public static void main(String args )BusinessBank bank1 = new BusinessBank();bank1 . savedMoney = 8000;bank1 . year = 5.236; double interest1 = bank1 .computerInterest();(2)商业银行的运行结果截图:3.3 接口【题 3 歌手大赛与学生体重评估】在 Lab4 项目中,编写程序,要求模拟歌

19、手大赛计算 选手成绩和评估班级学生体重。 歌手大赛计算选手成绩的方法是去掉一个最高分和一个 最低分后再计算平均分,而学校评估一个班级的学生的体重时,是计算全班同学的平均 体重。 SongGame 类和 School 类都实现了 ComputerAverage 接口,但实现方式不同。 ComputerAverage 类和 Estimator 主类的部分代码已给出(如下) ,按下列代码模板要求, 将【代码】部分替换为 Java程序代码,并写出 SongGame 类和 School 类。/ComputerAverage.javapublic interface ComputerAverage/ 接口

20、public double average(double x);/Estimator.javapublic class Estimator /主类public static void main(String args)double a = 9.89, 9.88, 9.99, 9.12, 9.69, 9.76, 8.97;double b = 56, 55.5, 65, 50, 51.5, 53.6, 70, 49, 66, 62, 46;ComputerAverage computer; computer = new SongGame();/computer 调用 average(double

21、 x)方法,将数组 a 传递给参数 x /【代码 1】System.out.printf("%n");System.out.printf(" 歌手最后得分: %5.3fn", result);computer = new School();/computer 调用 average(double x) 方法,将数组 b 传递给参数 x /【代码 2】System.out.printf(" 学生平均体重: %5.2f kg", result);运行效果如下图。【知识点】1. 接口体中只有常量的声明(没有变量)和抽象方法声明。而且接口体中所

22、有的常量 的访问权限一定都是 public (允许省略 public 、 final 修饰符)、所有的抽象方法的访 问权限一定都是 public (允许省略 public 、 abstract 修饰符)。2. 类实现接口,以便绑定接口中的方法。一个类可以实现多个接口,类通过使用关键 字 implements 声明自己实现一个或多个接口。如果一个非抽象类实现了某个接口, 那么这个类必须重写的所有方法。【实验指导】1. 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该 接口变量就可以调用被类实现的接口方法。2. 接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现

23、方式。【学生解答】(1)程序代码:【代码 1】 double result = computer.average(a);【代码 2】 result = computer.average(b);/ SongGame.javaclass SongGame implements ComputerAverage public double average( double x) double min =10, max=-20, sum=0; for (int i = 0; i <x. length ; i +) if ( x i <= min)min = x i ;if ( x i >

24、= max) max = x i ; sum+=x i ;sum = sum - min - max;sum = ( double )( sum/( x. length -2); return sum;/School.javaclass School implements ComputerAveragepublic double average( double x) double sum = 0;for (int i = 0; i <x. length ; i +) sum+= x i ;double aver = ( double )( sum/ x. length ); return

25、 aver ;(2)运行结果截图:【思考题(选做) 】School 类如果不重写 public double average(double x) 方法,程序编译时提示怎样的错 误?3.4 接口回调(选做)【题 4(选做) 天气预报 】在 Lab4 项目中,编写一个天气预报的 Java 应用程序,天气 可能出现不同的状态,要求用接口封装天气的状态,具体要求如下:( 1 )编写一个接口 WeatherState,该接口有一个名字为 void showState( ) 的方法。( 2)编写 Weather 类,该类中有一个 WeatherState 接口声明的变量 state。另外,该类有 一个 s

26、how( )方法,在该方法中让接口 state回调 showstate( )方法。( 3)编写若干个实现 WeatherState 接口的类,负责刻画天气的各种状态。 (4)编写主类,在主类中进行天气预报。程序运行效果如下图。【知识点】掌握面向接口的编程思想:1. 程序设计时经常会使用接口,因为接口只关心操作,不关心这些操作具体实现的细 节,可以使程序的设计者把主要精力放在程序的设计上, 而不拘泥于细节的实现 (细 节留给接口的实现者) ,即避免设计者把大量的时间和精力花费与具体的算法上。2. 使用接口进行程序设计的核心技术之一是使用接口回调,即将实现接口的类的对象 的引用放到接口变量中,那么

27、这个接口变量就可以调用类实现的接口方法。3. 面向接口编程,是指当设计某种重要的类是,不让该类面向具体的类,而是面向接 口,即所设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。【学生解答】(1)程序代码:/WeatherState.javapublic interface WeatherState public void showState();/TodayMoring.java class TodayMoring public void System.implements WeatherStateshowState()out .println(" 今天白天:多云,有时阴

28、" );/TodayNight.java class TodayNightpublic void System.implements showState()WeatherStateout .println(" 今天夜间:小雨转大雨" );/ TomorrowMoring.javaclass TomorrowMoring implements WeatherState public void showState()System. out .println(" 明天白天:小雨。 ");/ TomorrowNight.javaclass Tomorrow

温馨提示

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

评论

0/150

提交评论