14401048方萍3班实验4.docx
- 文档编号:25345870
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:17
- 大小:128.88KB
14401048方萍3班实验4.docx
《14401048方萍3班实验4.docx》由会员分享,可在线阅读,更多相关《14401048方萍3班实验4.docx(17页珍藏版)》请在冰豆网上搜索。
14401048方萍3班实验4
Java程序设计
实验四:
继承、多态与接口
1.提交期限和方法
期限:
第12周周五〔2015-11-27〕23:
59pm
方法:
由学习委员收集所有学生的实验报告,以电子档的形式提交给任课教师〔发:
9867941.〕。
2.实验目的与要求
掌握Java的根本数据类型、运算符、表达式和语句。
开发环境:
Eclipse
3.实验内容与题目
3.1子类的继承与方法的重写
【题1中国人与美国人】在Eclipse中创建名为Lab4的新项目,编写程序模拟中国人、美国人、人。
除主类外,程序中有4个类:
People、ChinaPeople、AmericanPeople和BeijingPeople类。
要求如下:
〔1〕People类有权限是protected的double型成员变量:
height和weight,以与publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。
〔2〕ChinaPeople类是People类的子类,新增了publicvoidchinaGongfu()方法。
要求ChinaPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。
〔3〕AmericanPeople类是People的子类,新增publicvoidamericanBoxing()方法。
要求AmericanPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。
〔4〕BeijingPeople类是ChinaPeople的子类,新增publicvoidbeijingOpera()方法。
要求BeijingPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。
运行效果如如下图。
按如下代码模板要求,将【代码】局部替换为Java程序代码。
局部代码已给出:
publicclassPeople
{
protecteddoubleweight,height;
publicvoidspeakHello()
{
System.out.println("yayayaya");
}
publicvoidaverageHeight()
{
height=173;
System.out.println("averageheight:
"+height);
}
publicvoidaverageWeight()
{
weight=70;
System.out.println("averageweight:
"+weight);
}
}
publicclassChinaPeopleextendsPeople
{
publicvoidspeakHello()
{
System.out.println("您好");
}
publicvoidaverageHeight()
{
height=168.78;
System.out.println("中国人平均身高:
"+height+"厘米");
}
//重写publicvoidaverageWeight()方法,输出:
"中国人平均体重:
65公斤"
//【代码1】
publicvoidchinaGongfu()
{
System.out.println("坐如钟,站如松,睡如弓");
}
}
publicclassAmericanPeopleextendsPeople
{
//重写publicvoidspeakHello()方法,输出"Howdoyoudo"
//【代码2】
//重写publicvoidaverageHeight()方法,输出"American'saverageheight:
176cm"
//【代码3】
publicvoidaverageWeight()
{
weight=75;
System.out.println("American'saverageweight:
"+weight+"kg");
}
publicvoidamericanBoxing()
{
System.out.println("直拳、勾拳、组合拳");
}
}
publicclassBeijingPeopleextendsChinaPeople
{
//重写publicvoidaverageHeight()方法,输出"人的平均身高:
172.5厘米"
//【代码4】
//重写publicvoidaverageWeight()方法,输出"人的平均体重:
70公斤"
//【代码5】
publicvoidbeijingOpera()
{
System.out.println("花脸、青衣、花旦和老生");
}
}
publicclassExample
{
publicstaticvoidmain(String[]args)
{
ChinaPeoplechinaPeople=newChinaPeople();
AmericanPeopleamericanPeople=newAmericanPeople();
BeijingPeoplebeijingPeople=newBeijingPeople();
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】publicvoidaverageWeight()
{
weight=65;
System.out.println("中国人平均体重:
"+weight+"公斤");
}
【代码2】publicvoidspeakHello()
{
System.out.println("Howdoyoudo");
}
【代码3】publicvoidaverageHeight()
{
height=176;
System.out.println("American'saverageheight:
"+height+"cm");
}
【代码4】publicvoidaverageHeight()
{
height=172.5;
System.out.println("人平均身高:
"+height+"厘米");
}
【代码5】publicvoidaverageWeight()
{
weight=70;
System.out.println("人平均体重:
"+weight+"公斤");
}
〔2〕运行结果截图:
【思考题〔选做〕】
People类中的publicvoidspeakHello(),publicvoidaverageHeight(),publicvoidaverageWeight()三个方法的方法体中的语句是否可以省略?
【答:
】可以省略.
3.2成员变量隐藏与super关键字
【题2银行与利息】在Lab4项目中,编写程序。
验证教材第5章81页的【例5-7】。
假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。
如按整年计算的方法:
DoublepuerInterest(){
interest=year*0.35*savedMoney;
returninterest;
}
建设银行的天利息计算公式为:
dayInterst=天数*0.0001*存款数
某某银行的天利息计算公式为:
dayInterst=天数*0.00012*存款数
参照例子中的建设银行或某某银行,再编写一个商业银行,让程序输出8000元存在商业银行8年零236天的利息。
【知识点】
1.成员变量隐藏和方法重写;
2.super关键字。
【实验指导】
1.当super调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。
2.子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认有“super();〞。
3.类中定义多个构造方法时,建议包括一个不带参数的构造方法,以便子类可以省略“super();〞。
【学生解答】
〔1〕商业银行的程序代码:
classBank{
intsavedMoney;
intyear;
doubleinterest;
publicdoubleputerInterest(){
interest=year*0.035*savedMoney;
returninterest;
}
}
classBusinessBankextendsBank{
doubleyear;
publicdoubleputerInterest(){
super.year=(int)year;
doubleremainNumber=year-(int)year;
intday=(int)(remainNumber*1000);
interest=super.puterInterest()+day*0.0001*savedMoney;
System.out.printf("%d元存在商业银行%d年零%d天的利息:
%.2f元\n",savedMoney,super.year,day,interest);
returninterest;
}
}
publicclassExample5_2{
publicstaticvoidmain(String[]args){
BusinessBankbank1=newBusinessBank();
bank1.savedMoney=8000;
bank1.year=5.236;
doubleinterest1=bank1.puterInterest();
}
}
〔2〕商业银行的运行结果截图:
3.3接口
【题3歌手大赛与学生体重评估】在Lab4项目中,编写程序,要求模拟歌手大赛计算选手成绩和评估班级学生体重。
歌手大赛计算选手成绩的方法是去掉一个最高分和一个最低分后再计算平均分,而学校评估一个班级的学生的体重时,是计算全班同学的平均体重。
SongGame类和School类都实现了puterAverage接口,但实现方式不同。
puterAverage类和Estimator主类的局部代码已给出〔如下〕,按如下代码模板要求,将【代码】局部替换为Java程序代码,并写出SongGame类和School类。
publicinterfaceputerAverage{//接口
publicdoubleaverage(doublex[]);
}
publicclassEstimator{//主类
publicstaticvoidmain(String[]args)
{
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};
puterAverageputer;
puter=newSongGame();
//puter调用average(doublex[])方法,将数组a传递给参数x
//【代码1】
System.out.printf("%n");
System.out.printf("歌手最后得分:
%5.3f\n",result);
puter=newSchool();
//puter调用average(doublex[])方法,将数组b传递给参数x
//【代码2】
System.out.printf("学生平均体重:
%5.2fkg",result);
}
}
运行效果如如下图。
【知识点】
1.接口体中只有常量的声明〔没有变量〕和抽象方法声明。
而且接口体中所有的常量的访问权限一定都是public〔允许省略public、final修饰符〕、所有的抽象方法的访问权限一定都是public〔允许省略public、abstract修饰符〕。
2.类实现接口,以便绑定接口中的方法。
一个类可以实现多个接口,类通过使用关键字implements声明自己实现一个或多个接口。
如果一个非抽象类实现了某个接口,那么这个类必须重写的所有方法。
【实验指导】
1.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。
2.接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方式。
【学生解答】
〔1〕程序代码:
【代码1】doubleresult=puter.average(a);
【代码2】result=puter.average(b);
classSongGameimplementsputerAverage{
publicdoubleaverage(doublex[]){
doublemin=10,max=-20,sum=0;
for(inti=0;i if(x[i]<=min){ min=x[i]; } if(x[i]>=max){ max=x[i]; } sum+=x[i]; } sum=sum-min-max; sum=(double)(sum/(x.length-2)); returnsum; } } classSchoolimplementsputerAverage{ publicdoubleaverage(doublex[]){ doublesum=0; for(inti=0;i sum+=x[i]; } doubleaver=(double)(sum/x.length); returnaver; } } 〔2〕运行结果截图: 【思考题〔选做〕】 School类如果不重写publicdoubleaverage(doublex[])方法,程序编译时提示怎样的错误? 【答: 】 3.4接口回调〔选做〕 【题4〔选做〕天气预报】在Lab4项目中,编写一个天气预报的Java应用程序,天气可能出现不同的状态,要求用接口封装天气的状态,具体要求如下: 〔1〕编写一个接口WeatherState,该接口有一个名字为voidshowState()的方法。 〔2〕编写Weather类,该类中有一个WeatherState接口声明的变量state。 另外,该类有一个show()方法,在该方法中让接口state回调showstate()方法。 〔3〕编写假如干个实现WeatherState接口的类,负责刻画天气的各种状态。 〔4〕编写主类,在主类中进展天气预报。 程序运行效果如如下图。 【知识点】 掌握面向接口的编程思想: 1.程序设计时经常会使用接口,因为接口只关心操作,不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不拘泥于细节的实现〔细节留给接口的实现者〕,即防止设计者把大量的时间和精力花费与具体的算法上。 2.使用接口进展程序设计的核心技术之一是使用接口回调,即将实现接口的类的对象的引用放到接口变量中,那么这个接口变量就可以调用类实现的接口方法。 3.面向接口编程,是指当设计某种重要的类是,不让该类面向具体的类,而是面向接口,即所设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。 【学生解答】 〔1〕程序代码: publicinterfaceWeatherState{ publicvoidshowState(); } classTodayMoringimplementsWeatherState{ publicvoidshowState(){ System.out.println("今天白天: 多云,有时阴。 "); } } classTodayNightimplementsWeatherState{ publicvoidshowState(){ System.out.println("今天夜间: 小雨转大雨"); } } //TomorrowMoring.java classTomorrowMoringimplementsWeatherState{ publicvoidshowState(){ System.out.println("明天白天: 小雨。 "); } } //Tomorrow classTomorrowNightimplementsWeatherState{ publicvoidshowState(){ System.out.println("明天夜间: 少云,有时晴"); } } classweather{ WeatherStatestate; voidshow(WeatherStatestate){ state.showState(); } } publicclassWeatherForecast{ publicstaticvoidmain(String[]args){ WeatherStateweath; weath=newTodayMoring(); weath.showState(); weath=newTodayNight(); weath.showState(); weatherw=newweather(); w.show(newTomorrowMoring());//接口回调 w.show(newTomorrowNight()); } } 〔2〕运行结果截图: 4.提交要求 本次实验需提交的文件包括: 〔1〕实验报告的word文档,文件名格式为: 学号某某班级实验X.doc〔例如: 14031103X三1班实验1.doc〕,将word文档的实验报告放入以“学号某某班级实验X〞命名的文件夹中。 如如下图所示。 〔2〕Java源文件,建立一个以“学号某某班级实验X〞命名的文件夹〔例如: 14031103X三1班实验1〕,文件夹里包含所要求建立的,以与项目中每题的Java源程序。 如如下图所示。 本次实验为个人任务,需独立完成,以电子档的形式提交给学习委员,再由学习委员在规定期限内提交给任课教师。 未按时提交实验报告者,每迟交一天扣一个等级分〔比如,原本为A等级的,迟交一天降为A-〕,扣完为止。 经辅导员同意并签字的事病假时间不计入迟交X围。 凡被发现实验报告有抄袭者,本次成绩以零分记。 5.实验报告成绩等级划分 成绩等级 对应的百分制分数 A+ 95~100 A 90~94 A- 85~89 B+ 80~84 B 75~79 B- 70~74 C+ 65~69 C 60~64 C- 50~59 F 0~49
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14401048 实验