




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计实验四:继承、多态与接口2015-2016学年第一学期Java程序设计实验四:继承、多态与接口1. 提交期限和方法期限:第12周周五(2015-11-27)23:59 pm 方法:由学习委员收集所有学生的实验报告,以电子档的形式提交给任课教师(发邮箱:9867941 )。2. 实验目的及要求掌握Java的基本数据类型、运算符、表达式和语句。运行环境:JDK1.7开发环境:Eclipse3. 实验内容及题目3.1 子类的继承与方法的重写【题1 中国人与美国人】在Eclipse 中创建名为Lab4的新项目,编写程序模拟中国人、美国人、北京人。除主类外,程序中有4个类:People、ChinaPeople、AmericanPeople和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 ()、public void averageHeight( )和public void averageWeight( )方法。(3)AmericanPeople类是People的子类,新增public void americanBoxing( )方法。要求AmericanPeople重写父类的public void speakHello( )、public void averageHeight( )和public void averageWeight( )方法。(4)BeijingPeople类是ChinaPeople的子类,新增public void beijingOpera( )方法。要求BeijingPeople重写父类的public void speakHello( )、public void averageHeight( )和public void averageWeight( )方法。运行效果如下图。按下列代码模板要求,将【代码】部分替换为Java程序代码。部分代码已给出:/People.javapublic class People protected double weight, height;public void speakHello() System.out.println(yayayaya);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 Peoplepublic void speakHello() System.out.println(您好);public void averageHeight()height = 168.78;System.out.println(中国人平均身高: + height + 厘米);/重写public void averageWeight()方法,输出:中国人平均体重:65 公斤/【代码1】public void chinaGongfu()System.out.println(坐如钟,站如松,睡如弓);/AmericanPeople.javapublic class AmericanPeople extends People /重写public void speakHello()方法,输出How do you do/【代码2】/重写public void averageHeight()方法,输出Americans average height:176 cm/【代码3】public void averageWeight()weight = 75;System.out.println(Americans average weight: + weight + kg);public void americanBoxing()System.out.println(直拳、勾拳、组合拳);/BeijingPeople.javapublic class BeijingPeople extends ChinaPeople /重写public void averageHeight()方法,输出北京人的平均身高:172.5 厘米/【代码4】/重写public void averageWeight()方法,输出北京人的平均体重:70 公斤/【代码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 BeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera();beijingPeople.chinaGongfu();【本题知识点】1. 子类的继承性;2. 子类对象的创建过程;3. 方法的继承与重写。【实验指导】1. 如果子类可以继承父类的方法,子类就有权利重写这个方法,子类通过重写父类的方法可以改变方法的具体行为。2. 方法重写时一定要保证方法的名字、类型、参数个数和类型同父类的某个方法完全相同,只有这样,子类继承的这个方法才被隐藏。3. 子类在重写方法时,不可以将实例方法更改成类方法,也不可以将类方法更改为实例方法,即如果重写的方法是static方法,static关键字必须要保留;如果重写的方法是实例方法,重写时不可以用static修饰该方法。【学生解答】(1)程序代码:【代码1】public void averageWeight()weight = 65;System.out.println(中国人平均体重: + weight+公斤);【代码2】public void speakHello() System.out.println(How do you do);【代码3】public void averageHeight()height = 176;System.out.println(Americans average height:+height +cm);【代码4】public void averageHeight()height = 172.5;System.out.println(北京人平均身高: + height + 厘米);【代码5】public void averageWeight()weight = 70;System.out.println(北京人平均体重: + weight+公斤);(2)运行结果截图:【思考题(选做)】People类中的public void speakHello( ), public void averageHeight( ), public void averageWeight( )三个方法的方法体中的语句是否可以省略?【答:】可以省略.3.2 成员变量隐藏与super关键字【题2 银行与利息】在Lab4项目中,编写程序。验证教材第5章81页的【例 5-7】。假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。如按整年计算的方法:Double compuerInterest()interest = year * 0.35 * savedMoney;return interest;建设银行的天利息计算公式为:dayInterst = 天数 * 0.0001 * 存款数大连银行的天利息计算公式为:dayInterst = 天数 * 0.00012 * 存款数参照例子中的建设银行或大连银行,再编写一个商业银行,让程序输出8000元存在商业银行8年零236天的利息。【知识点】1. 成员变量隐藏和方法重写;2. super关键字。【实验指导】1. 当super调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。2. 子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在在子类的构造方法中,没有明显地写出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 Bankdouble year;public double computerInterest()super.year = (int) year;double remainNumber = year - (int)year;int day = (int)(remainNumber*1000);interest = puterInterest()+day*0.0001*savedMoney;System.out.printf(%d元存在商业银行%d年零%d天的利息:%.2f元n,savedMoney,super.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 = puterInterest();(2)商业银行的运行结果截图:3.3 接口【题3 歌手大赛与学生体重评估】在Lab4项目中,编写程序,要求模拟歌手大赛计算选手成绩和评估班级学生体重。歌手大赛计算选手成绩的方法是去掉一个最高分和一个最低分后再计算平均分,而学校评估一个班级的学生的体重时,是计算全班同学的平均体重。SongGame类和School类都实现了ComputerAverage接口,但实现方式不同。ComputerAverage类和Estimator主类的部分代码已给出(如下),按下列代码模板要求,将【代码】部分替换为Java程序代码,并写出SongGame类和School类。/ComputerAverage.javapublic interface ComputerAverage/接口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 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. 接口体中只有常量的声明(没有变量)和抽象方法声明。而且接口体中所有的常量的访问权限一定都是public(允许省略public、final修饰符)、所有的抽象方法的访问权限一定都是public(允许省略public、abstract修饰符)。2. 类实现接口,以便绑定接口中的方法。一个类可以实现多个接口,类通过使用关键字implements声明自己实现一个或多个接口。如果一个非抽象类实现了某个接口,那么这个类必须重写的所有方法。【实验指导】1. 可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。2. 接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方式。【学生解答】(1)程序代码:【代码1】double result = computer.average(a);【代码2】result = computer.average(b);/ SongGame.javaclass SongGame implements ComputerAveragepublic double average(double x)double min=10,max=-20,sum=0;for(int i = 0;ix.length;i+)if(xi=max)max = xi;sum+=xi;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; ix.length;i+)sum+= xi;double aver = (double)(sum/x.length);return aver;(2)运行结果截图:【思考题(选做)】School类如果不重写public double average(double x)方法,程序编译时提示怎样的错误?【答:】3.4 接口回调(选做)【题4(选做) 天气预报】在Lab4项目中,编写一个天气预报的Java应用程序,天气可能出现不同的状态,要求用接口封装天气的状态,具体要求如下:(1)编写一个接口WeatherState,该接口有一个名字为void showState( )的方法。(2)编写Weather类,该类中有一个WeatherState接口声明的变量state。另外,该类有一个show( )方法,在该方法中让接口state回调showstate( )方法。(3)编写若干个实现WeatherState接口的类,负责刻画天气的各种状态。(4)编写主类,在主类中进行天气预报。程序运行效果如下图。【知识点】掌握面向接口的编程思想:1. 程序设计时经常会使用接口,因为接口只关心操作,不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不拘泥于细节的实现(细节留给接口的实现者),即避免设计者把大量的时间和精力花费与具体的算法上。2. 使用接口进行程序设计的核心技术之一是使用接口回调,即将实现接口的类的对象的引用放到接口变量中,那么这个接口变量就可以调用类实现的接口方法。3. 面向接口编程,是指当设计某种重要的类是,不让该类面向具体的类,而是面向接口,即所设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。【学生解答】(1)程序代码:/WeatherState.javapublic interface WeatherState public void showState();/TodayMoring.javaclass TodayMoring implements WeatherStatepublic void showState()System.out.println(今天白天:多云,有时阴。);/TodayNight.javaclass TodayNight implements WeatherStatepublic void showState()System.out.println(今天夜间:小雨转大雨);/ TomorrowMoring.javaclass TomorrowMoring implements WeatherStatepublic void showState()System.out.println(明天白天:小雨。);/ TomorrowNight.javaclass TomorrowNight implements WeatherStatepub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工程经济经验分享试题及答案
- 临沂火灾应急预案(3篇)
- 公文事务处理的实战技巧试题及答案
- 体育场火灾应急预案流程(3篇)
- 检验建筑工程材料合格与否的标准试题及答案
- 水利水电工程复习资料收集建议试题及答案
- 实战市政工程考试技巧与试题及答案
- 工程经济经济环境解析试题及答案
- 水利水电工程技术法规试题及答案
- 社交媒体对公共关系的影响试题及答案
- DL-T5181-2017水电水利工程锚喷支护施工规范
- 北京高中化学学业水平考试合格考知识点总结
- 畜牧养殖大型沼气项目可行性研究报告
- 陈志海-发热伴血小板减少综合征
- 2024年武汉长江科创科技发展有限公司招聘笔试参考题库附带答案详解
- 托管班学生隐私保护协议
- 世纪大道石灰固化土QC成果
- 古诗渔歌子古诗阅读赏析课件
- 第二章 中国的自然环境《第四节 自然灾害》课件
- 有机合成工作总结模板
- 2024年上海市高考英语完形填空试题真题汇编(含答案详解)
评论
0/150
提交评论