14401048方萍3班实验4_第1页
14401048方萍3班实验4_第2页
14401048方萍3班实验4_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

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

2、eople类有权限是protected的double型成员变量:height和weight,以及publicvoidspeakHello()、publicvoidaverageHeight()禾口publicvoidaverageWeight()方法。2)ChinaPeople类是People类的子类,新增了publicvoidchinaGongfu()方法。要求ChinaPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()禾口publicvoidaverageWeight()方法。(3) AmericanPeople类是Peo

3、ple的子类,新增publicvoidamericanBoxing()方法。要求AmericanPeople重写父类的publicvoidspeakHello()>publicvoidaverageHeight()禾口publicvoidaverageWeight()方法。(4) BeijingPeople类是ChinaPeople的子类,新增publicvoidbeijingOpera()方法。要求BeijingPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()禾口publicvoidaverageWeight()方法

4、。Java程序代码。运行效果如下图。按下列代码模板要求,将【代码】部分替换为G:aEkakpIc肚好Houdnrin耐£阳丘対身肓江3.州厘米ftiw:picfliiuwFM靶hrI甘吐:iW,01eft北瓦人戲平却豐高注72J1Xftnrr,irr>n,swrRkg部分代码已给出:/People.javapublicclassPeopleprotecteddoubleweight,height;publicvoidspeakHello()System.out.println("yayayaya");publicvoidaverageHeight()heig

5、ht=173;System.out.println("averageheight:"+height);publicvoidaverageWeight()weight=70;System.out.println("averageweight:"+weight);/ChinaPeople.javapublicclassChinaPeopleextendsPeoplepublicvoidspeakHello()System.out.println("您好");publicvoidaverageHeight()(”中国人平均身高:"

6、+height+"厘米");重写publicvoidaverageWeight()方法,输出:"中国人平均体重:65公斤"/【代码1】publicvoidchinaGongfu()System.out.println("坐如钟,站如松,睡如弓");/AmericanPeople.javapublicclassAmericanPeopleextendsPeople重写publicvoidspeakHello()方法,输出"Howdoyoudo"/【代码2】重写publicvoidaverageHeight()方法,输

7、出"American'saverageheight:176cm"/【代码3】publicvoidaverageWeight()System.out.println("American'saverageweight:"+weight+"kg");weight=75;weight=75;publicvoidamericanBoxing()(”直拳、勾拳、组合拳”);/BeijingPeople.javapublicclassBeijingPeopleextendsChinaPeople重写publicvoidaverage

8、Height()方法,输出"北京人的平均身高:172.5厘米/【代码4】重写publicvoidaverageWeight()方法,输出"北京人的平均体重:70公斤"/【代码5】publicvoidbeijingOpera()(”花脸、青衣、花旦和老生”);/Example.javapublicclassExamplepublicstaticvoidmain(Stringargs)ChinaPeoplechinaPeople=newChinaPeople();AmericanPeopleamericanPeople=newAmericanPeople();Beij

9、ingPeoplebeijingPeople=newBeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();

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

11、类方法更改为实例方法,即如果重写的方法是static方法,static关键字必须要保留;如果重写的方法是实例方法,重写时不可以用static修饰该方法。【学生解答】(1)程序代码:【代码1】publicvoidaverageWeight()weight=65;System.out.println("中国人平均体重:"+weight+"公斤");【代码2】publicvoidspeakHello()System.out.println("Howdoyoudo");【代码3】publicvoidaverageHeight()height=

12、176;System.out.println("American'saverageheight:"+height+"cm");【代码4】publicvoidaverageHeight()height=172.5;(“北京人平均身高:"+height+"厘米");【代码5】publicvoidaverageWeight()weight=70;System.out.println("北京人平均体重:"+weight+"公斤");(2)运行结果截图:rS9琶理员:匚人Windmd.e

13、we|口|回|亘:1doyoudo帀国人平均身髙=16飢沖厘米Amierlcdii*辱dueratjtslielgliBr:丄Tfin.OevjAlvneirxcan&a.vei*<agieueicfhtk爭北京人平均件董EM公斤险如钟,站如拾_睡如乌曆淳套¥艮壽老生半如钟"站如牡睦如弓I:Lab4src.Jhhr【思考题(选做)】People类中的publicvoidspeakHello(),publicvoidaverageHeight(),publicvoidaverageWeight()三个方法的方法体中的语句是否可以省略?【答:】可以省略.3.2成员

14、变量隐藏和super关键字【题2银行和利息】在Lab4项目中,编写程序。验证教材第5章81页的【例5-7】。假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。如按整年计算的方法:Doublecompuerlnterest()interest=year*0.35*savedMoney;returninterest;建设银行的天利息计算公式为:dayInterst=天数*0.0001*存款数大连银行的天利息计算公式为:daylnterst=天数*0.00012*存款数参照例子中的建设银行或大连银行,再编写一个商业银行,让程序输出8000元存在商业银行8年零236天

15、的利息。【知识点】成员变量隐藏和方法重写;1. super关键字。【实验指导】当super调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。1. 子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认有“super();”。2. 类中定义多个构造方法时,建议包括一个不带参数的构造方法,以便子类可以省略“super();”。【学生解答】(1)商业银行的程序代码:classBankintsave

16、dMoney;intyear;doubleinterest;publicdoublecomputerInterest()interest=year*0.035*savedMoney;returninterest;classBusinessBankextendsBankdoubleyear;publicdoublecomputerInterest()super.year=(int)year;doubleremainNumber=year-(int)year;intday=(int)(remainNumber*1000);interest=puterInterest()+day*0.0001*sa

17、vedMoneySystem.out.printf("%d元存在商业银行d年零d天的利息:%.2f元n",savedMoney,super.year,day,interest);returninterest;publicclassExample5_2publicstaticvoidmain(Stringargs)BusinessBankbank1=newBusinessBank();bank1.savedMoney=8000;bank1.year=5.236;doubleinterest1=puterInterest();(2)商业银行的运行结果截图:B存秆商JiWft年审

18、四莎天的刑息i1588.00_,1s>TTJ.T3.3接口【题3歌手大赛和学生体重评估】在Lab4项目中,编写程序,要求模拟歌手大赛计算选手成绩和评估班级学生体重。歌手大赛计算选手成绩的方法是去掉一个最高分和一个最低分后再计算平均分,而学校评估一个班级的学生的体重时,是计算全班同学的平均体重。SongGame类和School类都实现了ComputerAverage接口,但实现方式不同。ComputerAverage类和Estimator主类的部分代码已给出(如下),按下列代码模板要求,将【代码】部分替换为Java程序代码,并写出SongGame类和School类。/ComputerAve

19、rage.javapublicinterfaceComputerAverage/接口publicdoubleaverage(doublex);/Estimator.javapublicclassEstimator主类publicstaticvoidmain(Stringargs)doublea=9.89,9.88,9.99,9.12,9.69,9.76,8.97;doubleb=56,55.5,65,50,51.5,53.6,70,49,66,62,46;ComputerAveragecomputer;computer=newSongGame();/computer调用average(doub

20、lex)方法,将数组a传递给参数x/【代码1】System.out.printf("%n");System.out.printf("歌手最后得分:%5.3fn",result);computer=newSchool();/computer调用average(doublex)方法,将数组b传递给参数x/【代码2】System.out.printf("学生平均体重:%5.2fkg",result);运行效果如下图。:X?hangDbektn|pLah4JauacEsitlinaltni*.Jaua-Mlsnrshrtriyeskcudii

21、iab4J>J<tudEtliidtor【知识点】1. 接口体中只有常量的声明(没有变量)和抽象方法声明。而且接口体中所有的常量的访问权限一定都是public(允许省略public、final修饰符)、所有的抽象方法的访问权限一定都是public(允许省略public、abstract修饰符)。2. 类实现接口,以便绑定接口中的方法。一个类可以实现多个接口,类通过使用关键字implements声明自己实现一个或多个接口。如果一个非抽象类实现了某个接口,那么这个类必须重写的所有方法。【实验指导】可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用

22、被类实现的接口方法。1. 接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方式。【学生解答】(1)程序代码:【代码1】doubleresult=computer.average(a);【代码2】result=computer.average(b);/SongGame.javaclassSongGameimplementsComputerAveragepublicdoubleaverage(doublex)doublemin=10,max=-20,sum=0;for(inti=0;i<x.length;i+)if(xi<=min)min=xi;if(xi>=max

23、)max=xi;sum+=xi;sum=sum-min-max;sum=(double)(sum/(x.length-2);returnsum;/School.javaclassSchoolimplementsComputerAveragepublicdoubleaverage(doublex)3.4接口回调(选做)【题4(选做)天气预报】在Lab4项目中,编写一个天气预报的Java使用程序,天气可能出现不同的状态,要求用接口封装天气的状态,具体要求如下:(1) 编写一个接口WeatherState,该接口有一个名字为voidshowState()的方法。(2) 编写Weather类,该类中有

24、一个WeatherState接口声明的变量state。另外,该类有一个show()方法,在该方法中让接口state回调showstate()方法。(3)编写若干个实现WeatherState接口的类,负责刻画天气的各种状态。(4)编写主类,在主类中进行天气预报。程序运行效果如下图。有时聒参百r丙时阴-小雨转.K南it!【知识点】掌握面向接口的编程思想:1. 程序设计时经常会使用接口,因为接口只关心操作,不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不拘泥于细节的实现(细节留给接口的实现者),即避免设计者把大量的时间和精力花费和具体的算法上。2. 使用接口进行程序

25、设计的核心技术之一是使用接口回调,即将实现接口的类的对象的引用放到接口变量中,那么这个接口变量就可以调用类实现的接口方法。3. 面向接口编程,是指当设计某种重要的类是,不让该类面向具体的类,而是面向接口,即所设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。【学生解答】(1)程序代码:/WeatherState.javapublicinterfaceWeatherStatepublicvoidshowState();/TodayMoring.javaclassTodayMoringimplementsWeatherStatepublicvoidshowState()System.ou

26、t.println("今天白天:多云,有时阴。”);/TodayNight.javaclassTodayNightimplementsWeatherStatepublicvoidshowState()System.out.println("今天夜间:小雨转大雨”);/TomorrowMoring.javaclassTomorrowMoringimplementsWeatherStatepublicvoidshowState()System.out.println("明天白天:小雨。”);/TomorrowNight.javaclassTomorrowNightimplementsWeatherStatepublicvoidshowState()System.out.println("明天夜间:少云,有时晴");classweatherWeatherStatestate;v

温馨提示

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

评论

0/150

提交评论