实验五继承与接口_第1页
实验五继承与接口_第2页
实验五继承与接口_第3页
实验五继承与接口_第4页
实验五继承与接口_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

实验五继承与接口

1.实验目的

1、掌握类的继承细节内容,包括子类的继承、子类对象创立、成员变量的继承与隐藏、

方法的继承与重写

2、掌握重写的目的以及怎样使用super关键字

3、掌握上转型对象与接口回调技术

4、掌握类怎样实现接口,及面向接口的编程思想

2.实验内容

1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。

1)实验1中国人与美国人

2)实验2银行与利息

3)实验3面积之和

4)实验4歌手大赛

5)实验5天气预报

2、设计编写程序完成以下任务。

1)根据要求修改实验2,参照建设银行再编写一个商业银行(广发行),让程序输出

8000元在广发行8年零212天的利息。

2)根据要求修改实验3,再增加一种儿何图形(梯形),并让主类中的tuxing的某

些元素是梯形的上转型对象。

3)仿照实验5编写一个程序实现模拟水杯中的水在不同温度下可能出现的状态。

4)编写一个接口并创立两个实现该接口的类A、BoA、B类实现了接口的f方法,A

类的f方法内容为计算1!+3!+5!……+9!并返回结果,B类的f方法内容为计算2!+4!

+6!……+10!也返回结果;再编一个执行类,执行类运行时要求通过接口回调方式用同一

个对象实例分别调用A类的f方法和B类的f方法。

5〕

(1)定义一个汽车类Vehicle,要求如下:(知识点:类的继承方法的覆盖)

(a)属性包括:汽车品牌brand(String类型)、颜色color(String类型)和速度

speed(double类型

(b)至少提供一个有参的构造方法(要求品牌和颜色可以初始化为任意值,但速度的

初始值必须为0)。

(c)为属性提供访问器方法。注意:汽车品牌一旦初始化之后不能修改。

(d)定义一个一般方法run(),用打印语句描述汽车奔跑的功能。

定义测试类VehicleTest,在其main方法中创立一个品牌为“benz〃、颜色为

“black”的汽车。

(2)定义一个Vehicle类的子类轿车类Car,要求如下:

(a)轿车有自己的属性载人数loader(int类型)。

(b)提供该类初始化属性的构造方法。

(c)重新定义run(),用打印语句描述轿车奔跑的功能。

(d)定义测试类Test,在其main方法中创立一个品牌为“Honda”、颜色为"red”,

载人数为2人的轿车。

面向对象根底出过类似的,这个把继承引入了

6)Cola公司的雇员分为以下假设干类:(知识点:多态)

(1)ColaEmployee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。

方法:getSa1ary(intmonth)根据参数月份来确定工资,如果该月员工过生日,那么

公司会额外奖励100元。

(2)SalariedEmp1oyee:ColaEmployee的子类,拿固定工资的员工。

属性:月薪

(3)HourlyEmployee:ColaEmployee的子类,按小时拿工资的员工,每月工作超出

160小时的局部按照L5倍工资发放。

属性:每小时的工资、每月工作的小时数

(4)SalesEmployee:ColaEmployee的子类,销售人员,工资由月销售额和提成率决

定。

属性;月销售额、提成率

(5)定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员

工的工资数额,写一个测试类TestCompany,在main方法,把假设干各种类型的员工放在

一个ColaEmployee数组里,并单元出数组中每个员工当月的工资。

知识点:继承与多态

7)利用接口实现动态的创立对象:(知识点:接口)

(1)创立4个类

1苹果

2香蕉

3葡萄

4园丁

(2)在三种水果的构造方法中打印一句话.

以苹果类为例

classapple

(

publicapple()

(

System.out.println(“创立了一个苹果类的对象");

)

}

(3)类图如下:

(4)要求从控制台输入一个字符串,根据字符串的值来判断创立三种水果中哪个类的

对象。

运行结果如图:

3.实验步骤

实验一、1

实验一、2

实验一、3

实验一、4

实验一、5

实验二、1

packageSFirst;

publicclassBank{

intsavedMoney;

intyear;

doubleinterest;

doublpintprp<;tRatp=0.?9;

publicdoublecomputerlnterest(){

interest=year*interestRatexsavedMoney;

returninterest;

}

publicvoidsetlnterestRatefdoublerate){

interestRate=rate;

}

}

packageSFirst;

publicclassGuangFaBankextendsBank{

doubleyear;

publicdoublecomputerlnterest(){

super.year=(int)year;

doubler=year-(int)year;

intday=(int)(r*1000);

doubleyearlnterest=superputerlnterest();//【代码1】〃super调用隐藏的

computerlnterest()方法

doubledayInterest=day*0.0001*savedMoney;

interest=yearlnterest+daylnterest;

returninterest;

}

}

packageSFirst;

publicclassSaveMoney{

publicstaticvoidmain(String[]args){

intamount=8000;

GuangFaBankbankl=newGuangFaBank。;

bankl.savedMoney=airount;

bankl.year=8.212;

bankl.setInterestRate(0.035);

doubleinterestl=banklputerlnterest();

System.out.printin("8000元在广发行8年零212天的利息为:”+interestl);

}

}

实验结果

实验二、2

packageSSecond;

publicabstractclassGeometry{

publicabstractdoublegetArea();

)

packageSSecond;

publicclassMainClass{

publicstaticvoidmain(String[]args){

Trapezoidtuxing=newTrapezoid(4.7,7.9,7);〃有29Geometry对象

doubles=tuxing.getArea();

System.out.printf("梯形的面枳为:\n%f",s);

}

}

packageSSecond;

publicclassTrapezoidextendsGeometry{

doublea,b,h;

Trapezoid(doublea,doubleb,doubleh){

this.a=a;

this.b=b;

this.h-h;

}

〃【代码2】〃重写getArea()方法

(©Override

publicdoublegetArea(){

//TODOAuto-generatedmethodstub

return(a+b)*h/2;

}

}

实验结果

实验二、3

packageSThird;

publicclassBoiledStateimplementsWaterState{

©Override

publicvoidshowState(){

//TODOAuto-generatedmethodstub

System.out.printing开水。");

}

//【代码3】〃重写publicvoidshowState()方法

)

packageSThird;

publicclassIceStateimplementsWaterState(

publicvoidshowState(){

System.out.print("结冰。");

)

}

packageSThird;

publicclassLittleWarmStateimplementsWaterState(

〃【代码1】〃重写publicvoidshowState()方法

@Override

publicvoidshowState(){

//TODOAuto-generatedmethodstub

System.out.printin("微凉。");

}

}

packageSThird;

publicclassWarmStateimplementsWaterState{

@Ovprridp

publicvoidshowState(){

//TODOAuto-generatedmethodstub

System.out.printin("温水。

}

//【代码2】〃重写publicvoidshowState()方法

}

packageSThird;

publicclassWater{

WatcrStatcstate;

publicvoidshow(){

state.showState();

}

publicvoidsetState(Waterstates){

STate=s;

}

}

packageSThird;

publicclassWaterForecast(

publicstaticvoidmain(String[]args){

WaterwaterState=newWater();

System.out.print("\n温度在90-100时水杯水的状态:”);

waterstate.setStat€(newBoiledState());

waterstate.show();

System.out.print("\n温度在50--80时水杯水的状态:");

waterstate.setState(newWarmState());

waterstate.show();

System.out.print("\n温度在30-50时水杯水的状态:”);

waterstate.setState(newLittleWarmState());

waterstate.show();

System.out.print("\n温度在0度下时水杯水的状态:");

waterstate.setState(newIceState());

waterstate.show();

)

}

packageSThird;

publicinterfaceWaterstate{

publicvoidshowState();

}

实验结果

实验四

packageSForth;

publicclassAimplementsobject{

publicintf(inta,intb);

intsum=0,temp=l;

for(inti=a;i<=b;i=i+2){

for(intj=1;j<=i;j++){

temp*=j;

}

sum+=temp;

temp=l;

)

returnsum;

}

}

packageSForth;

publicclassBimplementsobject{

publicintf(inta,intb){

intsum=0,temp=l;

for(inti=a;i<=b;i=i+2){

for(intj=l;j<=i;j++){

temp*=j;

}

sum+=temp;

temp=l;

)

returnsum;

}

}

packageSForth;

publicinterfaceobject{

intf(inta,intb);

}packageSForth;

publicclassTest{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Aa=newA();

Bb=newB();

intsuml=a.f(1,9);

intsum2=b.f(2,10);

System.out.println("l!+3!+5!...+9!的结果为:"+suml);

System,out.printIn("2!+4!+6!...+10!的结果为:"+sum2);

}

}

实验结果

实验五

packageSFifth;

publicclassCarextendsVehicle{

intloader;

publicCar(Stringbrand,Stringcolor,doublespeedyint1){

super(brand,color,speed);

this.loader=l;

//TODOAuto-gpnprAtpdconstructorstub

}

publicvoidrun(){

System.out.printIn("颜色为"+super.getColor()+"的"+super.getBrand()+”汽车的时速

为:"+super.getSpeed());

)

}

packageSFifth;

publicclassTest{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Carc=newCar("Honda","red",300.0,20);

c.run();

}

}

packageSFifth;

publicclassVehicle{

privateStringbrand="BMW";〃汽车品牌

privatestringcolor="red”;〃汽车颜色

privatedoublespeed=0;〃汽车时速

publicStringgetColor(){

returncolor;

}

publicvoidsetColor(Stringcolor){

this.color=color;

}

publicdoublegetSpeed(){

returnspeed;

}

publicvoidsetSpeed(doublespeed){

this.speed=speed;

}

publicStringgetBrand(){

returnbrand;

)

publicVehicle(Stringbrand,Stringcolor,doublespeed){

//TODOAuto-generatedconstructorstub

this.brand=brand;

this.color=color;

this.speed=speed;

)

publicvoidrun(){

System.out.println(brand+”汽车的时速为:"+speed);

}

}

packageSFifth;

publicclassVphiclpTp<;t{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Vehiclev=newVehicle("benz"/'black"200.0);

v.run();

)

}

实验结果

实验六

packageSSixth;

publicclassColaEmployee{

Stringname;//员工姓名

intmonth;〃员工生日月份

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

=name;

}

publicintgetMonth(){

returnmonth;

}

publicvoidsetMonth(intmonth){

this.month=month;

}

intgetSalary(intmonth){

if(month==this.month)

(

return100;

}

else{

return0;}

)

}

packageSSixth;

publicclassCompanyextendsColaEmployee{

voidprint(Stringname,doublesalary,intmonth){

StringName=name;

doubleSalary=salary;

intMonth=month;

5丫5七一・。戊?2工111(“员工”+岫巾6+"在"+帆011功+“月“+”的薪资为:[Salary);

}

}

packageSSixth;

publicclassHourlyEmployeeextendsColaEmployee{

doublehours;〃每月工作的时间

doublehsalary;〃每小时的工资

Companyc=newCompany();

publicHourlyEmployee(Stringname,intmonth,doublehours,doublehsalary){

//TODOAuto-generatedconstructorstub

this.hours=hours;

this.hsalary=hsalary;

this.month=month;

=name;

}

publicdoublcgctHours(){

returnhours;

}

publicvoidsetHours(doublehours){

this.hours=hours;

}

publicdoublegetHsalary();

returnhsalary;

}

publicvoidsetHsalary(doublehsalary){

this.hsalary=hsalary;

}

publicintgetSalary(intmonth){

if(this.hours<=160){

this.hsalary=this.hsalary*this.hours+super.getSalary(month);

c.print(name,hsalary,month);

return0;

)

else{

this.hsalary=(this.hours-160)*this.hsalary*l.5+160*this.hsalary+super.getSalary(month

);

c.print(name,hsalary,month);

return0;

}

)

}

packageSSixth;

publicclassSalariedEmployeeextendsColaEmployee{

doublesalary;〃员匚固定薪资(按月)

Companyc=newCompany();

publicSalariedEmployee(Stringname,intmonth,doublesalary){

//TODOAuto-generatedconstructorstub

=name;

this.month=month;

this.salary=salary;

}

publicintgetSalary(intmonth)

{

this.salary=salary+super.getSalary(month);

c.print(name,salary,month);

return0;

}

}

packageSSixth;

publicclassSalesEmployeeextendsColaEmployee{

doublemoney;〃月销售额

doubleticheng;〃提成率.

Companyc=newCompany();

publicSalesEmployee(Stringname,intmonth,doublemoney,doubleticheng){

//TODOAuto-generatedconstructorstub

this.money=money;

this.month=month;

=name;

this.ticheng=ticheng;

}

publicdoublegetMoney(){

returnmoney;

}

publicvoidsetMoney(doublemoney){

this.money=money;

}

publicdoublegetTicheng();

returnticheng;

}

publicvoidsetTicheng(doubleticheng){

this.ticheng=ticheng;

)

publicintgetSalary(intmonth)

{

this.money=money+super.getSalary(month)+(money*ticheng);

c.print(name,money,month);

return0;

}

}

packageSSixth;

publicclassSalesEmployeeextendsColaEmployee(

doublemoney;〃月销售额

doubleticheng;〃提成率

Companyc=newCompany。;

publicSalesEmployee(Stringname,intmonth,doublemoney,doubleticheng){

//TODOAuto-generatedconstructorstub

this.money=money;

this.month=month;

this.namp=namp;

this.ticheng=ticheng;

}

publicdoublegetMoney(){

returnmoney;

}

publicvoidsetMoney(doublemoney){

this.money=money;

}

publicdoublcgctTichcng();

returnticheng;

}

publicvoidsetTicheng(doubleticheng){

this.ticheng=ticheng;

}

publicintgetSalary(intmonth)

{

this.money=money+super.getSalary(month)+(money*ticheng);

c.print(name,money,month);

return0;

}

}

packageSSixth;

publicclassTestcompany{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

ColaEmployee[]ce=newColaEmployee[3];

ce[0]=newSalariedEirployee("aa",9,3000.0);

ce[l]=newHourlyEmployee("bb",3,2000.0,180);

ce[2]=newSalesEmployee("cc",6J6000J0.3);

ce[0].getSalary(2);

ce[l].getSalary(2);

ce[2].getSalary(2);

)

}

实验结果

实验七

packageSSeventh;

publicclassappleimplementsFruit{

publicvoidapple(){

//TODOAuto-generatedmethodstub

System.out.printing创立「一个苹果类的对象");

}

@Override

publicvoidbanana(){

//TODOAuto-generatedmethodstub

}

0Override

publicvoidpear(){

//TODOAuto-generatedmethodstub

)

)

packageSSeventh;

publicclassbananaimplementsFruit{

publicvoidbananaQ{

//TODOAutogeneratedmethodstub

System.out.println("创立了一个香蕉类的对象");

}

©Override

publicvoidapple(){

//TODOAuto-generatedmethodstub

}

©Override

publicvoidpear(){

//TODOAuto-generatedmethodstub

}

jpackageSSeventh;

publicinterfaceFruit{

voidapple。;

voidbanana();

voidpear();

}

packageSSeventh;

publicclasspearimplementsFruit{

publicvoidpear(){

//TODOAuto-generatedmethodstub

System.out.printIn("创立了一个梨子类的对象");

}

@Override

publicvoidapple(){

//TODOAuto-generatedmethodstub

)

@Override

publicvoidbanana(){

//TODOAuto-generatedmethodstub

)

}packageSSeventh;

importjava.util.Scanner;

publicclassTest{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

//Fruitf=newbanana();

Scannprinnut=npwScannpr(Sy<;tpm.in);

System.out.printing请输入您要创立的类:”);

Stringattr=input.nextLine();

if(attr.equals("banana")){

Fruitfruit=newbanana();

fruit.banana();

}

elseif(attr.equals("apple")){

Fruitfruit=newapple();

fruit.applc();

}

elseif(attr.equals("pear")){

Fruitfruit=newpear();

fruit.pear();

)

elseSystem.out.printin("输入有误!”);

}

}

实验结果

4.评分标准

1.A一一内容功能完善,编程风格好,人机接口界面好;

2.B——内容功能完善,编程风格良好,人机接口界面良好;

3.C——完成必做内容;

4.D——能完成必做内容;

5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).

参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,

最后运行得到的相关文件,把实验所得文件一起打包上交。(压缩包的文件名为:学号后三

位和名字开头字母,如109zhh.RAR|ZIP)

附录:

实验1中国人与美国人

模板代码

People.java

publicclassPeople{

protecteddoubleweight,height;

publicvoidspeakHello(){

Systcm.out.println("yayayaya");

)

publicvoidaverageHcight(){

height=!73;

System.out.printlnC'avenigeheight:"+height):

publicvoidaverageWeight(){

wcight=70;

System.oul.printlnC'averageweight:"+weighl);

}

)

ChinaPeople.java

publicclassChinaPeopleextendsPeople{

publicvoidspeakHello(){

System.out.println("你好");

}

publicvoidaverageHeight(){

height=168.78;

System.out.printin("中国人的平均身高:"+height+"厘米)

)

//【代码1】〃重写publicvoidaverageWeight。方法,输出:"中国人的平均体重:65公斤"

publicvoidchinaGongfu(){

System.out.prinlln("坐如钟,站如松,睡如弓)

)

)

AmericanPeople.java

publicclassAmericanPeopleextendsPeople{

//[代码2]〃重写publicvoidspeakHello。方法,输出:"Howdoyoudo"

//[代码3]〃重写publicvoidaverageHeight。方法,输出:"American'saverageheight:176cm"

publicvoidaverageWeight(){

wcight=75;

Syslem.oul.printingAmerican'saverageweighi:"+weighi+"kg");

}

publicvoidamericanBoxingO{

System.out.println("直拳、钩拳、组合拳");

)

)

BeijingPeopIe.java

publicclassBeijingPeopleextendsChinaPeople{

//[代码4]〃重写publicvoidaverageHeight。方法,输出北京人的平均身高:172.5厘米"

//(代码5】〃重写publicvoidaverageWeight。方法,输出:“北京人的平均体重:70公斤”

publicvoidbeijingOpera(){

System.out.priniln("花脸、青衣、花旦和老生");

}

)

Example.java

publicclassExample{

publicstaticvoidmain(String[]args){

ChinaPeoplechinaPeople=newChinaPeople();

AmcricanPcoplcamcricanPcoplc=newAmericanPeople]);

BeijingPeoplebeijingPeople=newBeijingPeople();

ChinaPeople.speakHello();

americanPeople.speakHeIlo();

bcijingPcoplc.spcakHcllo();

chinaPeople.averageHeight();

americanPeople.averageHeight();

beijingPeople.averageHeighl();

chinaPeople.averageWeight();

americanPeople.averageWeight();

beijingPeople.averageWeightO;

chinaPcople.chinaGongfu();

amcricanPcoplc.amcricanBoxingO;

beijingPeople.beijingOpera();

beijingPeople.chinaGongfu();

实验2银行与利息

模板代码

Bank.java

publicclassBank{

intsavedMoney;

in(year;

doubleinterest;

doubleintcrcstRate=0.29;

publicdoublecomputerlnterest(){

intcrcst=ycar*intcrcstRatc*savcdMoncy;

returninterest;

)

publicvoidsetInteresiRate(doublerate){

interestRate=rate;

)

)

ConstrucdonBank.java

publicclassConslructionBankextendsBank{

doubleyear;

publicdoublecomputerlnterest(){

super.year=(int)year;

doubler=year-(int)year;

intday=(int)(r*1000);

doubleycarlntcrcst=//【代码1]//super调用隐藏的computerlnterest。方法

doubledayInterest=day*0.0001*savedMoney;

intcrcst=ycarlntcrest+daylntcrcst;

Syslem.out.printf("%d元存在建设银行%d年零%d天的利息:%f元

\n".savedMerest):

returninterest;

BankOfDalian.java

publicclassBankOfDalianextendsBank{

doubleyear;

publicdoublecomputerlnterest(){

super.ycar=(int)ycar;

doubler=year-(in()year;

intday=(int)(r*1000);

doubleycarlnlcrcst=//【代码2】"super调用隐藏的computcrlntcrcsl。方法

doubledayinterest二day*0.00012*savedMoney;

interest=yearlnterest+dayImerest;

System.out.printf("%d元存在大连银行%d年零%d天的利息:%f元

\n",savcdMoney,supcr.ycar,day,interest);

returninterest;

}

)

SaveMoney.java

publicclassSaveMoney{

publicstaticvoidmain(Stringf|args){

intamount=8000;

ConstructionBankbankl=newCons(ructionBank();

bank1.savedMoney=amount;

bankl.year=8.236;

bank1.set!nterestRate(0.035);

doubleinterest1=bankIputerlnterest();

BankOfDalianbank2=newBankOfDalian();

bank2.savedMoney=amount;

bank2.year=8.236;

bank2.setIntcrcstRate(0.035);

doublein(eresl2=bank2pulerlnterest();

System.out.printf("两个银行利息相差%£7L\n,,,interest2-interest1);

)

)

实验3面积之和

模板代码

Geomctry.java

publicabstractclassGeometry{

publicabstractdoublegetArea();

TotalArea.java

publicclassTotalArea{

Gcometryf]tuxing;

doubletotalArea=0;

publicvoidsetTuxing(Geometry[]t){

tuxing=t;

}

publicdoublecomputcrTatalArca(){

//[代码3]〃用循环语句让(uxing的元素调用getArea方法,并将返I可的值累加到totalArea

returntotalArea;

Rect.java

publicclassRcctextendsGeometry{

doublea,b;

Rcct(doublea,doubleb){

this.a=a;

this.b=b;

//【代码1J〃重写getArea。方法

Circle.java

publicclassCircleextendsGeometry{

doubler;

Circle(doubler){

this.r=r;

//[代码2]〃重写getArea。方法

MainCiass.java

publicclassMainClass{

publicstaticvoidniain(String[]args){

Geometry」luxing=newGeometry[29];〃有29个Geometry对象

for(inti=0;i<tuxing.length;i++){//29个Geometry对象分成两类

if(i%2==0){

luxing[i]=newRecl(16+i,68);

}elseif(i%2==l){

tuxing[i]=newCircle(10+i);

TotalAreacomputer=ne\vTotalArea();

coinputcr.setTuxing(tuxing);

System.out.printf("各种青形的面积之和:\n%f',computerpulerTatalAreaO);

实验4歌手大赛

模板代码

ComputerAverage.java

publicinterfaceComputerAverage{

publicdoubleaverage(doublex[J);

)

SongGame.java

publicclassSongGameimplementsComputerAverage{

publicdoubleavcragc(doublcx[]){

intcounl=x.length;

doubleaver=0aemp=0;

for(inti=0;i<count;i++){

for(in(j=0;j<count;j++){

if(xU]<x[i]){

temp=x[j];

x|j]=x[i];

x[i]=(emp;

)

)

)

for(inti=0;i<count;i++){

aver=aver+xfi];

)

温馨提示

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

评论

0/150

提交评论