14401048方萍3班实验4Word文件下载.docx
《14401048方萍3班实验4Word文件下载.docx》由会员分享,可在线阅读,更多相关《14401048方萍3班实验4Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
部分代码已给出:
//People.java
publicclassPeople
{
protecteddoubleweight,height;
publicvoidspeakHello()
{
System.out.println("
yayayaya"
);
}
publicvoidaverageHeight()
height=173;
averageheight:
"
+height);
publicvoidaverageWeight()
weight=70;
averageweight:
+weight);
}
//ChinaPeople.java
publicclassChinaPeopleextendsPeople
您好"
height=168.78;
中国人平均身高:
+height+"
厘米"
//重写publicvoidaverageWeight()方法,输出:
中国人平均体重:
65公斤"
//【代码1】
publicvoidchinaGongfu()
坐如钟,站如松,睡如弓"
//AmericanPeople.java
publicclassAmericanPeopleextendsPeople
//重写publicvoidspeakHello()方法,输出"
Howdoyoudo"
//【代码2】
//重写publicvoidaverageHeight()方法,输出"
American'
saverageheight:
176cm"
//【代码3】
weight=75;
saverageweight:
+weight+"
kg"
publicvoidamericanBoxing()
直拳、勾拳、组合拳"
//BeijingPeople.java
publicclassBeijingPeopleextendsChinaPeople
北京人的平均身高:
172.5厘米"
//【代码4】
//重写publicvoidaverageWeight()方法,输出"
北京人的平均体重:
70公斤"
//【代码5】
publicvoidbeijingOpera()
花脸、青衣、花旦和老生"
//Example.java
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;
+weight+"
公斤"
【代码2】publicvoidspeakHello()
{
System.out.println("
}
【代码3】publicvoidaverageHeight()
height=176;
+height+"
cm"
【代码4】publicvoidaverageHeight()
height=172.5;
北京人平均身高:
【代码5】publicvoidaverageWeight()
北京人平均体重:
(2)运行结果截图:
【思考题(选做)】
People类中的publicvoidspeakHello(),publicvoidaverageHeight(),publicvoidaverageWeight()三个方法的方法体中的语句是否可以省略?
【答:
】可以省略.
3.2成员变量隐藏与super关键字
【题2银行与利息】在Lab4项目中,编写程序。
验证教材第5章81页的【例5-7】。
假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。
如按整年计算的方法:
DoublecompuerInterest(){
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;
publicdoublecomputerInterest(){
interest=year*0.035*savedMoney;
returninterest;
classBusinessBankextendsBank{
doubleyear;
super.year=(int)year;
doubleremainNumber=year-(int)year;
intday=(int)(remainNumber*1000);
interest=puterInterest()+day*0.0001*savedMoney;
System.out.printf("
%d元存在商业银行%d年零%d天的利息:
%.2f元\n"
savedMoney,super.year,day,interest);
publicclassExample5_2{
publicstaticvoidmain(String[]args){
BusinessBankbank1=newBusinessBank();
bank1.savedMoney=8000;
bank1.year=5.236;
doubleinterest1=puterInterest();
(2)商业银行的运行结果截图:
3.3接口
【题3歌手大赛与学生体重评估】在Lab4项目中,编写程序,要求模拟歌手大赛计算选手成绩和评估班级学生体重。
歌手大赛计算选手成绩的方法是去掉一个最高分和一个最低分后再计算平均分,而学校评估一个班级的学生的体重时,是计算全班同学的平均体重。
SongGame类和School类都实现了ComputerAverage接口,但实现方式不同。
ComputerAverage类和Estimator主类的部分代码已给出(如下),按下列代码模板要求,将【代码】部分替换为Java程序代码,并写出SongGame类和School类。
//ComputerAverage.java
publicinterfaceComputerAverage{//接口
publicdoubleaverage(doublex[]);
//Estimator.java
publicclassEstimator{//主类
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(doublex[])方法,将数组a传递给参数x
//【代码1】
%n"
歌手最后得分:
%5.3f\n"
result);
computer=newSchool();
//computer调用average(doublex[])方法,将数组b传递给参数x
//【代码2】
学生平均体重:
%5.2fkg"
1.接口体中只有常量的声明(没有变量)和抽象方法声明。
而且接口体中所有的常量的访问权限一定都是public(允许省略public、final修饰符)、所有的抽象方法的访问权限一定都是public(允许省略public、abstract修饰符)。
2.类实现接口,以便绑定接口中的方法。
一个类可以实现多个接口,类通过使用关键字implements声明自己实现一个或多个接口。
如果一个非抽象类实现了某个接口,那么这个类必须重写的所有方法。
1.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。
2.接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方式。
【代码1】doubleresult=computer.average(a);
【代码2】result=computer.average(b);
//SongGame.java
classSongGameimplementsComputerAverage{
publicdoubleaverage(doublex[]){
doublemin=10,max=-20,sum=0;
for(inti=0;
i<
x.length;
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;
//School.java
classSchoolimplementsComputerAverage{
doublesum=0;
i<
sum+=x[i];
doubleaver=(double)(sum/x.length);
returnaver;
School类如果不重写publicdoubleaverage(doublex[])方法,程序编译时提示怎样的错误?
】
3.4接口回调(选做)
【题4(选做)天气预报】在Lab4项目中,编写一个天气预报的Java应用程序,天气可能出现不同的状态,要求用接口封装天气的状态,具体要求如下:
(1)编写一个接口WeatherState,该接口有一个名字为voidshowState()的方法。
(2)编写Weather类,该类中有一个WeatherState接口声明的变量state。
另外,该类有一个show()方法,在该方法中让接口state回调showstate()方法。
(3)编写若干个实现WeatherState接口的类,负责刻画天气的各种状态。
(4)编写主类,在主类中进行天气预报。
程序运行效果如下图。
掌握面向接口的编程思想:
1.程序设计时经常会使用接口,因为接口只关心操作,不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不拘泥于细节的实现(细节留给接口的实现者),即避免设计者把大量的时间和精力花费与具体的算法上。
2.使用接口进行程序设计的核心技术之一是使用接口回调,即将实现接口的类的对象的引用放到接口变量中,那么这个接口变量就可以调用类实现的接口方法。
3.面向接口编程,是指当设计某种重要的类是,不让该类面向具体的类,而是面向接口,即所设计类中的重要数据是接口声明的变量,而不是具体类声明的对象。
//WeatherState.java
publicinterfaceWeatherState{
publicvoidshowState();
//TodayMoring.java
classTodayMoringimplementsWeatherState{
publicvoidshowState(){
今天白天:
多云,有时阴。
//TodayNight.java
classTodayNightimplementsWeatherState{
今天夜间:
小雨转大雨"
//TomorrowMoring.java
classTomorrowMoringimplementsWeatherState{
明天白天:
小雨。
//TomorrowNight.java
classTomorrowNightimplementsWeatherState{
明天夜间:
少云,有时晴"
classweather{
WeatherStatestate;
voidshow(WeatherStatestate){
state.showState();
publicclassWeatherForecast{
publicstaticvoidmain(String[]args){
WeatherStateweath;
weath=newTodayMoring();
weath.showState();
weath=newTodayNight();
weatherw=newweather();
w.show(newTomorrowMoring());
//接口回调
w.show(newTomorrowNight());
4.提交要求
本次实验需提交的文件包括:
(1)实验报告的word文档,文件名格式为:
学号姓名班级实验X.doc(例如:
14031103张三1班实验1.doc),将word文档的实验报告放入以“学号姓名班级实验X”命名的文件夹中。
如下图所示。
(2)Java源文件,建立一个以“学号姓名班级实验X”命名的文件夹(例如:
14031103张三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