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;icontent[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;idata[i]=b[i];
}
publicvoidaddData(intm){
for(inti=0;idata[i]=data[i]+m;
}
}
voidcopyToCD(){
includeCD.setContent(data);
}
voidshowData(){
for(inti=0;iSystem.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;iSystem.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;iSystem.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;iSystem.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程序是由若干个类所构成。
了解到了对象的组合以及参数传递,在实验过程中,由于理解题目错误,导致离题,经过老师的提醒,终于写出了正确答案。