Java实验类与继承.docx
- 文档编号:7334683
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:12
- 大小:398.49KB
Java实验类与继承.docx
《Java实验类与继承.docx》由会员分享,可在线阅读,更多相关《Java实验类与继承.docx(12页珍藏版)》请在冰豆网上搜索。
Java实验类与继承
实验报告
实验课程:
Java面向程序设计实验
实验内容:
类与对象
院(系):
计算机学院
专业:
计算机科学与技术(软件工程方向)
班级:
学生姓名:
学号:
指导教师:
2014年3月26日
一、实验目的:
1、掌握用类来封装对象的属性和行为的方法;
2、掌握对象的组合和参数传递;
3、掌握类变量与实例变量、类方法与实例方法的区别。
二、实验内容
(-)实验题目一:
编写一个java应用程序,该程序中有两个类:
Tank和Fight具体要求如下:
1、Tank类有一个double类型变量speed,用于刻画坦克的速度;一个int型变量bulletAmount,用于刻画坦克的炮弹数量。
定义了speedUp()和speedDown()方法,体现坦克有加速、减速行为;定义了setBulletAmount(intp)方法,用于设置坦克炮弹的数量;定义了fire()方法,体现坦克有开炮行为。
1.程序源代码:
packagep1;
publicclassTank{
doublespeed;
intbulletAmount;
voidspeedUp(ints){
speed=s+speed;
}
voidspeedDown(intd){
if(speed-d>=0)
speed=speed-d;
else
speed=0;
}
voidsetBulletAmount(intm){
bulletAmount=m;
}
intgetBulletAmount(){
returnbulletAmount;
}
doublegetSpeed(){
returnspeed;
}
voidfire(){
if(bulletAmount>=1){
bulletAmount=bulletAmount-1;
System.out.println("打出一发炮弹");
}
else{
System.out.println("没有炮弹了,无法开火");
}
}
}
packagep1;
publicclassFight{
publicstaticvoidmain(Stringargs[]){
Tanktank1,tank2;
tank1=newTank();
tank2=newTank();
tank1.setBulletAmount(10);
tank2.setBulletAmount(10);
System.out.println("tank1的炮弹数量:
"+tank1.getBulletAmount());
System.out.println("tank2的炮弹数量:
"+tank2.getBulletAmount());
tank1.speedUp(80);
tank2.speedUp(90);
System.out.println("tank1目前的速度:
"+tank1.getSpeed());
System.out.println("tank2目前的速度:
"+tank2.getSpeed());
tank1.speedDown(15);
tank2.speedDown(30);
System.out.println("tank1目前的速度:
"+tank1.getSpeed());
System.out.println("tank2目前的速度:
"+tank2.getSpeed());
System.out.println("tank1开火:
");
tank1.fire();
System.out.println("tank2开火:
");
tank2.fire();
tank2.fire();
System.out.println("tank1的炮弹数量:
"+tank1.getBulletAmount());
System.out.println("tank2的炮弹数量:
"+tank2.getBulletAmount());
}
}
2.实验结果:
图1
3、实验课后练习:
(1)改进speedUp方法,使得Tank类的对象调用它能将Speed值超过220;
答:
只需加入如下代码,其实验结果如图2:
voidspeedUp(ints){
if(s+speed<=200)//加入判断语句即可
speed=s+speed;
}
图2:
tank2加速200,超过220,所以tank2数值保持不变
(2)增加一个刹车方法:
voidbrake(),Tank类的对象调用它将speed的值变为0.
答:
只需增加如下代码:
其结果如图3所示:
voidbrake(){
speed=0;
}
System.out.println("tank2加速200:
");
tank2.speedUp(200);
System.out.println("tank2调用brake后:
");
tank2.brake();
图3:
可看出tank2被清零
实验2:
计算机与光盘
1、程序源代码:
packagep1;
publicclassCD{
intsize;
intcontent[];
publicvoidsetSize(intsize){
this.size=size;
content=newint[size];
}
publicintgetSize(){
returnsize;
}
publicint[]getContent(){
returncontent;
}
publicvoidsetContent(int[]b){
intmin=Math.min(content.length,b.length);
for(inti=0;i content[i]=b[i]; } } packagep1; publicclassComputer{ intdata[]; CDincludeCD; publicvoidputCD(CDcd){ includeCD=cd; intsize=includeCD.getSize(); data=newint[size]; } voidcopyToComputer(){ int[]b=includeCD.getContent(); intmin=Math.min(data.length,b.length); for(inti=0;i data[i]=b[i]; } publicvoidaddData(intm){ for(inti=0;i data[i]=data[i]+m; } } voidcopyToCD(){ includeCD.setContent(data); } voidshowData(){ for(inti=0;i System.out.printf("%3d",data[i]); } } } packagep1; publicclassUser{ publicstaticvoidmain(Stringargs[]){ CDdataCD=newCD(); intb[]={1,2,3,4,5,6,7,8}; dataCD.setSize(b.length); dataCD.setContent(b); inta[]=dataCD.getContent(); System.out.println("dataCD上的内容: "); for(inti=0;i System.out.printf("%3d",a[i]); ComputercomputerIMB=newComputer(); computerIMB.putCD(dataCD); System.out.println("\n将dataCD的数据复制到计算机: computerIMB"); computerIMB.copyToComputer(); System.out.println("\ncomputerIMB上的内容: "); computerIMB.showData(); intm=12; System.out.println("\ncomputerIMB将每个数据增加"+m); computerIMB.addData(m); System.out.println("computerIMB将增值后的数据复制到CD: dataCD"); computerIMB.copyToCD(); System.out.println("dataCD上的内容: "); a=dataCD.getContent(); for(inti=0;i System.out.printf("%3d",a[i]); } } 2、实验结果: 图4 2、实验课后练习: 主类中再添加一个CD的对象,然后将计算机中的数据(data数组)复制到CD对象中。 答: 只需增加如下代码,实验结果如图5 publicint[]getData(){ returndata; } CDnewCD=newCD(); computerIMB.copyToCD(); newCD.setSize(computerIMB.getData().length); newCD.setContent(computerIMB.getData()); System.out.println("\nnewCD上的内容: "); a=newCD.getContent(); for(inti=0;i System.out.printf("%3d",a[i]); 图5 实验3家族的姓氏 1、程序源代码: packagep1; publicclassFamilyPerson{ staticStringsurname; Stringname; publicstaticvoidsetSurname(Strings){ surname=s; } publicvoidsetName(Strings){ name=s; } } packagep1; publicclassMainClass{ publicstaticvoidmain(Stringargs[]){ FamilyPerson.surname="李"; FamilyPersonfather,sonOne,sonTwo; father=newFamilyPerson(); sonOne=newFamilyPerson(); sonTwo=newFamilyPerson(); father.setName("向阳"); sonOne.setName("抗日"); sonTwo.setName("抗战"); System.out.println("父亲: "+father.surname+father.name); System.out.println("大儿子: "+sonOne.surname+sonOne.name); System.out.println("二儿子: "+sonTwo.surname+sonTwo.name); father.setSurname("张"); System.out.println("父亲: "+father.surname+father.name); System.out.println("大儿子: "+sonOne.surname+sonOne.name); System.out.println("二儿子: "+sonTwo.surname+sonTwo.name); } } 2、实验结果: 图6 3、实验后的练习 (1)代码3是否可以是FamilyPerson.setSurname(“张”); 答: 可以,因为该方法是类方法可以用类名调用。 (2)能否将主类中的代码: sonOne.setName(“抗日”); 修改为: FamilyPerson.setName(“抗日”); 答: 不行,因为FamilyPerson只是个类名,不是具体的实例。 只有静态方法才能被类名调用。 二.个人小结 通过本次实验,了解到了类与对象,使用new运算符和类的构造方法创建对象,熟悉了类方法、类变量,实例方法、实例变量,明白了Java程序是由若干个类所构成。 了解到了对象的组合以及参数传递,在实验过程中,由于理解题目错误,导致离题,经过老师的提醒,终于写出了正确答案。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实验 继承
![提示](https://static.bdocx.com/images/bang_tan.gif)