14401048方萍3班实验.docx
《14401048方萍3班实验.docx》由会员分享,可在线阅读,更多相关《14401048方萍3班实验.docx(12页珍藏版)》请在冰豆网上搜索。
14401048方萍3班实验
Java程序设计
实验四:
继承、多态与接口
1.提交期限和方法
期限:
第12周周五(2015-11-27)23:
59pm
方法:
由学习委员收集所有学生的实验报告,以电子档的形式提交给任课教师(发邮箱:
)。
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程序代码。
部分代码已给出:
176cm
1.
3.2成员变量隐藏与super关键字
【题2银行与利息】在Lab4项目中,编写程序。
验证教材第5章81页的【例5-7】。
假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。
如按整年计算的方法:
DoublecompuerInterest(){
interest=year**savedMoney;
returninterest;
}
建设银行的天利息计算公式为:
dayInterst=天数**存款数
大连银行的天利息计算公式为:
dayInterst=天数**存款数
参照例子中的建设银行或大连银行,再编写一个商业银行,让程序输出8000元存在商业银行8年零236天的利息。
【知识点】
1.成员变量隐藏和方法重写;
2.super关键字。
【实验指导】
1.当super调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。
2.子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认有“super();”。
3.类中定义多个构造方法时,建议包括一个不带参数的构造方法,以便子类可以省略“super();”。
【学生解答】
(1)商业银行的程序代码:
classBank{
intsavedMoney;
intyear;
doubleinterest;
publicdoublecomputerInterest(){
interest=year**savedMoney;
returninterest;
}
}
classBusinessBankextendsBank{
doubleyear;
publicdoublecomputerInterest(){
=(int)year;
doubleremainNumber=year-(int)year;
intday=(int)(remainNumber*1000);
interest=()+day**savedMoney;
"%d元存在商业银行%d年零%d天的利息:
%.2f元\n",savedMoney,,day,interest);
returninterest;
}
}
publicclassExample5_2{
publicstaticvoidmain(String[]args){
BusinessBankbank1=newBusinessBank();
=8000;
=;
doubleinterest1=();
}
}
(2)商业银行的运行结果截图:
3.3接口
【题3歌手大赛与学生体重评估】在Lab4项目中,编写程序,要求模拟歌手大赛计算选手成绩和评估班级学生体重。
歌手大赛计算选手成绩的方法是去掉一个最高分和一个最低分后再计算平均分,而学校评估一个班级的学生的体重时,是计算全班同学的平均体重。
SongGame类和School类都实现了ComputerAverage接口,但实现方式不同。
ComputerAverage类和Estimator主类的部分代码已给出(如下),按下列代码模板要求,将【代码】部分替换为Java程序代码,并写出SongGame类和School类。
//
publicinterfaceComputerAverage{//接口
publicdoubleaverage(doublex[]);
}
//
publicclassEstimator{//主类
publicstaticvoidmain(String[]args)
{
doublea[]={,,,,,,};
doubleb[]={56,,65,50,,,70,49,66,62,46};
ComputerAveragecomputer;
computer=newSongGame();
//computer调用average(doublex[])方法,将数组a传递给参数x
//【代码1】
"%n");
"歌手最后得分:
%5.3f\n",result);
computer=newSchool();
//computer调用average(doublex[])方法,将数组b传递给参数x
//【代码2】
"学生平均体重:
%5.2fkg",result);
}
}
运行效果如下图。
【知识点】
1.接口体中只有常量的声明(没有变量)和抽象方法声明。
而且接口体中所有的常量的访问权限一定都是public(允许省略public、final修饰符)、所有的抽象方法的访问权限一定都是public(允许省略public、abstract修饰符)。
2.类实现接口,以便绑定接口中的方法。
一个类可以实现多个接口,类通过使用关键字implements声明自己实现一个或多个接口。
如果一个非抽象类实现了某个接口,那么这个类必须重写的所有方法。
【实验指导】
1.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。
2.接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方式。
【学生解答】
(1)程序代码:
【代码1】doubleresult=(a);
【代码2】result=(b);
//
classSongGameimplementsComputerAverage{
publicdoubleaverage(doublex[]){
doublemin=10,max=-20,sum=0;
for(inti=0;i<;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/);
returnsum;
}
}
//
classSchoolimplementsComputerAverage{
publicdoubleaverage(doublex[]){
doublesum=0;
for(inti=0;i<;i++){
sum+=x[i];
}
doubleaver=(double)(sum/;
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(){
"今天白天:
多云,有时阴。
");
}
}
//
classTodayNightimplementsWeatherState{
publicvoidshowState(){
"今天夜间:
小雨转大雨");
}
}
//
classTomorrowMoringimplementsWeatherState{
publicvoidshowState(){
"明天白天:
小雨。
");
}
}
//
classTomorrowNightimplementsWeatherState{
publicvoidshowState(){
"明天夜间:
少云,有时晴");
}
}
classweather{
WeatherStatestate;
voidshow(WeatherStatestate){
();
}
}
publicclassWeatherForecast{
publicstaticvoidmain(String[]args){
WeatherStateweath;
weath=newTodayMoring();
();
weath=newTodayNight();
();
weatherw=newweather();
(newTomorrowMoring());//接口回调
(newTomorrowNight());
}
}
(2)运行结果截图:
4.提交要求
本次实验需提交的文件包括:
(1)实验报告的word文档,文件名格式为:
学号姓名班级实验(例如:
张三1班实验),将word文档的实验报告放入以“学号姓名班级实验X”命名的文件夹中。
如下图所示。
(2)Java源文件,建立一个以“学号姓名班级实验X”命名的文件夹(例如:
张三1班实验1),文件夹里包含所要求建立的,以及项目中每题的Java源程序。
如下图所示。
本次实验为个人任务,需独立完成,以电子档的形式提交给学习委员,再由学习委员在规定期限内提交给任课老师。
未按时提交实验报告者,每迟交一天扣一个等级分(比如,原本为A等级的,迟交一天降为A-),扣完为止。
经辅导员同意并签字的事病假时间不计入迟交范围。
凡被发现实验报告有抄袭者,本次成绩以零分记。
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