面向对象编程实验报告
WORD格式甘肃政法学院
本科学生实验报告
(一)
姓名:
学院:计算机科学学院
专业:计算机科学与技术
班级:
实验课程名称:JAVA开发与语言基础
试验时间2011年9月28日
指导教师及职称
实验成绩:
开课时间2011学年第一学期
甘肃政法学院实验管理中心印制
实验题目面向对象编程小组合作否
姓名唐晓梅班级2011级专升本班学号201181210126
一、实验目的:
1、熟悉Java面向对象程序设计的基本思想。
2、掌握类与对象的定义及使用方法。
3、掌握package语句与import语句的用法。
4、掌握java继承中父类及其子类的定义方法。
5、掌握子类重写父类同名方法的方法。
6、掌握用法。
二、实验环境:
装有JDK1.6,Eclipse的的计算机一台
三、实验内容与步骤:
(1)Java程序开发环境配置:
1、下载并安装JDK1.6,过程可参考教材P4-6。
2、配置环境变量:SDK平台提供的Java编译器(javac.exe)和Java
解释器(java.exe)位于Java安装目录的bin文件夹中,为了能在任何目录中使用编译器和解释器,应在系统特性中设置Path。对于Windows2000、Windows2003、WindowsXP,用鼠标右键点击“我的电脑”,弹出菜单,然后选择属性,弹出“系统特性”对话框,再单击
该对话框中的高级选项,然后点击按钮“环境变量”,添加如下图所示的系统环境变量:
J2SDK的安装目录的jre文件夹中包含着Java应用程序运行时所需要的Java类库,这些类库被包含在jre\lib目录下的压缩文件rt.jar 中。因此,再添加如下图所示环境变量。
3、下载Eclipse3.4或以上版本,将其解压到某一目录下。使用时只
需双击eclipse图标即可。
4、在记事本中编写简单的Application程序,运用JDK命令方式在
屏幕上打印输出“你好,很高兴学习Java”。
5、在记事本中编写简单的Applet程序,运用JDK命令方式在Java
Applet中绘制一行文字:“这是一个JavaApplet程序”。
6、在Eclipse环境下完成3,4所要求的任务,可参考教材P416实验1
的步骤。
(2)Java程序:
实验3类与对象
1、三角形、梯形和圆形的类封装:分别定义三角形、梯形和圆形类,要求每个类中包含构造方法、求周长及面积的方法。最后在主方法中为三角形、梯形和圆形类创建对象并打印输出各种图形的周长及面积。该程序的模板代码如下:请将其补充完整并调试运行。
AreaAndLength.java
classTrangle
{
doublesideA,sideB,sideC,area,length;
booleanboo;
publicTrangle(doublea,doubleb,doublec)
{
【代码1】//参数a,b,c分别赋值给sideA,sideB,sideC
if(【代码2】)//a,b,c构成三角形的条件表达式
{
【代码3】//给boo赋值。
}
else
{
【代码4】//给boo赋值。
}
}
doublegetLength()
{
【代码5】//方法体,要求计算出length的值并返回} publicdoublegetArea()
{
if(boo)
{
doublep=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
returnarea;
}
else
{
System.out.println("不是一个三角形,不能计算面积");
return0;
}
}
publicvoidsetABC(doublea,doubleb,doublec)
{
【代码6】//参数a,b,c分别赋值给sideA,sideB,sideC
if(【代码7】)//a,b,c构成三角形的条件表达式
{
【代码8】//给boo赋值。
}
else
{
【代码9】//给boo赋值。
}
}
}
classLader
{
doubleabove,bottom,height,area;
Lader(doublea,doubleb,doubleh)
{
【代码10】//方法体,将参数a,b,c分别赋值给above,bottom,height
}
doublegetArea()
{
【代码11】//方法体,,要求计算出area返回}
}
classCircle
{
doubleradius,area;
Circle(doubler)
{
【代码12】//方法体
}
doublegetArea()
{
【代码13】//方法体,要求计算出area返回}
doublegetLength()
{
【代码14】//getArea方法体的代码,要求计算出length返回
}
voidsetRadius(doublenewRadius)
{
radius=newRadius;
}
doublegetRadius()
{
returnradius;
}
}
publicclassAreaAndLength
{
publicstaticvoidmain(Stringargs[])
{
doublelength,area;Circ
lecircle=null;
Trangletrangle;
Laderlader;
【代码15】//创建对象circle
【代码16】//创建对象trangle。
【代码17】//创建对象lader
【代码18】//circle调用方法返回周长并赋值给length System.out.println("圆的周长:"+length);
【代码19】//circle调用方法返回面积并赋值给area System.out.println("圆的面积:"+area);
【代码20】//trangle调用方法返回周长并赋值给length System.out.println("三角形的周长:"+length);
【代码21】//trangle调用方法返回面积并赋值给area System.out.println("三角形的面积:"+area);
【代码22】//lader调用方法返回面积并赋值给area System.out.println("梯形的面积:"+area);
【代码23】//trangle调用方法设置三个边,要求将三个边修改为12,34,1。
【代码24】//trangle调用方法返回面积并赋值给area System.out.println("三角形的面积:"+area);
【代码25】//trangle调用方法返回周长并赋值给length System.out.println("三角形的周长:"+length);
}
}
通过编译得出如下答案:
【代码1】:sideA=a;
sideB=b;
sideC=c;
【代码2】:a+b>c&&a+c>b&&c+b>a
【代码3】:boo=true;
【代码4】:boo=false;
【代码5】:
if(boo)
{
length=sideA+sideB+sideC;
returnlength;
}
else
{
System.out.println("不是一个三角形,不能计算周长");
return0;
}
【代码6】:sideA=a;sideB=b;sideC=c;
【代码7】:a+b>c&&a+c>b&&c+b>a
【代码8】:boo=true;
【代码9】:boo=false;
【代码10】:
above=a;
bottom=b;
height=h;
【代码11】:
area=(above+bottom)/2*height;
returnarea;
【代码12】:radius=r;
【代码13】:return3.14*radius*radius;
【代码14】:return3.14*2*radius;
【代码15】:circle=newCircle(10);
【代码16】:trangle=newTrangle(3,4,5);
【代码17】:lader=newLader(3,4,10);
【代码18】:length=circle.getLength();
【代码19】:area=circle.getArea();
【代码20】:length=trangle.getLength();
【代码21】:area=trangle.getArea();
【代码22】:area=lader.getArea();
【代码23】:trangle.setABC(12,34,1);
【代码24】:area=trangle.getArea();
【代码25】:length=trangle.getLength();
2、学习实例成员与类成员的区别:按照下面模板代码中的注释信息将该程序补充完整并调试运行。
Example.java
classA
{
【代码1】//声明一个float型实例变量a
【代码2】//声明一个float型类变量b,即static 变量b
voidsetA(floata)
{
【代码3】//将参数a的值赋值给成员变量a
}
voidsetB(floatb)
{
【代码4】//将参数b的值赋值给成员变量b
}
floatgetA()
{
returna;
}
floatgetB()
{
returnb;
}
voidinputA()
{
System.out.println(a);
}
staticvoidinputB()
{
System.out.println(b);
}
}
publicclassExample
{
publicstaticvoidmain(Stringargs[])
{
【代码5】//通过类名操作类变量b,并赋值100
【代码6】//通过类名调用方法inputB()
Acat=newA();
Adog=newA();
【代码7】//cat象调用方法setA(inta)将cat的成员a的值设置为200
【代码8】//cat调用方法setB(intb)将cat的成员b 的值设置为400
【代码9】//dog象调用方法setA(inta)将dog的成员a的值设置为150
【代码10】//dog调用方法setB(intb)将dog的成员b 的值设置为300
【代码11】//cat调用inputA()。
【代码12】//cat调用inputB()。
【代码13】//dog调用inputA()。
【代码14】//dog调用inputB()。
}
}
通过编译得出如下答案:
【代码1】:floata;
【代码2】:staticfloatb;
【代码3】:this.a=a;
【代码4】:this.b=b;【代码5】:
A.b=100;
【代码6】:A.inputB();
【代码7】:cat.setA(200);
【代码8】:cat.setB(400);【代码9】:
dog.setA(150);【代码10】:
dog.setB(300);
【代码11】:cat.inputA();
【代码12】:cat.inputB();
【代码13】:dog.inputA();
【代码14】:dog.inputB();
3、使用package语句与import语句:上机调试下面程序,学会package 与import语句的用法。
SquareEquation.java
packagetom.jiafei;
publicclassSquareEquation{
doublea,b,c;
doubleroot1,root2;bool
eanboo;
publicSquareEquation(doublea,doubleb,doublec){
this.a=a;t
his.b=b;
this.c=c;
if(a!=0)
{
boo=true;}e
lse
{
boo=false;}
}
publicvoidgetRoots(){
if(boo)
{
System.out.println("是一元2次方程");doubledisk=b*b-4*a*c;
if(disk>=0)
{
root1=(-
b+Math.sqrt(disk))/(2*a);root2=(-b-
Math.sqrt(disk))/(2*a);
System.out.printf("方程的根:%f,%f\n",root1,root2);
}el
se
{
System.out.printf("方程没有实根\n");}
}else
{
System.out.println("不是一元2次方程");}
}
publicvoidsetCoefficient(doublea,doubleb,doublec)
{
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
{
boo=true;}
else{
boo=false;
}
}}
SunRise.java
importtom.jiafei.*;cl
assSunRise
{
publicstaticvoidmain(Stringargs[]){
SquareEquationequation=newSquareEquation(4,5,1);
equation.getRoots();
equation.setCoefficient(-3,4,5);
equation.getRoots();
}
}
通过编译得出如下答案:
【这是在JDK下运行的错误,因为没有在JDK下建包】
如下图所示:
【这个是在eclipse下运行的,因为把包的名字建错了,所以出错。】
【这个就把包的名字改过来了,改成tao.jiafei,这样就对了。】
实验4继承与接口
1、定义父类People,分别定义People类的子类ChinaPeople,AmericanPeople和BeijingPeople并分别重写父类中的各个方法。最后
在主方法中分别创建各子类的对象并调用各自的方法打印输出信息。该
程序的模板代码如下:请将其补充完整并调试运行。
classPeople
{
protecteddoubleweight,height;
publicvoidspeakHello()
{
System.out.println("yayawawa");
}
publicvoidaverageHeight()
{
height=173;
System.out.println("averageheight:"+height);
}
publicvoidaverageWeight()
{
weight=70;
System.out.println("averageweight:"+weight);
}}
classChinaPeopleextendsPeople
{
【代码1】//重写publicvoidspeakHello()方法,要求输出类似“你好,吃了吗”这样的
//汉语信息
【代码2】//重写publicvoidaverageHeight()方法,要求输出类似
//“中国人的平均身高:168.78厘米”这样的汉语信息
【代码3】//重写publicvoidaverageWeight()方法,
//要求输出类似“中国人的平均体重:65公斤”这样的汉语信息
publicvoidchinaGongfu()
{
【代码4】//输出中国武术的信息,例如:"坐如钟,站如松,睡
如弓"等
}
}
classAmericanPeopleextendsPeople
{
【代码5】//重写publicvoidspeakHello()方法,要求输出类似
//“Howdoyoudo”这样的英语信息。
【代码6】//重写publicvoidaverageHeight()方法
【代码7】//重写publicvoidaverageWeight()方法publicvoidamericanBoxing()
{
【代码8】//输出拳击的信息,例如,“直拳”、“钩拳”等}
}
classBeijingPeopleextendsChinaPeople
{
【代码9】//重写publicvoidspeakHello()方法,要求输出类似“您好”这样的汉语信息
【代码10】//重写publicvoidaverageHeight()方法
【代码11】//重写publicvoidaverageWeight()方法publicvoidbeijingOpera()
{
【代码12】//输出京剧的信息
}
}
publicclassExample
{
publicstaticvoidmain(Stringargs[])
{
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】:publicvoidspeakHello()
{
System.out.println("你好,吃饭了吗?");
}
【代码2】:
publicvoidaverageHeight()
{
height=173;
System.out.println("中国人的平均身高:"+height+" 厘米");
}
【代码3】:
publicvoidaverageWeight()
{
weight=67.34;
System.out.println("中国人的平均体重:"+weight+" 公斤");
}
【代码4】:System.out.println("坐如钟,站如松,睡如弓");
【代码5】:
publicvoidspeakHello()
{
System.out.println("HowdoYoudo");
}
【代码6】:
publicvoidaverageHeight()
{
height=188;
System.out.println("AmerianAverageheight:"+height+" cm");
}
【代码7】:
publicvoidaverageWeight()
{
weight=80.23;
System.out.println("AmerianAverage
weight:"+weight+"kg");
}
【代码8】:System.out.println("直拳、钩拳");
【代码9】:
publicvoidspeakHello()
{
System.out.println("您好");
}
【代码10】:
publicvoidaverageHeight()
{
height=16;
System.out.println("北京人的平均身高:"+height+"厘米");
}
【代码11】:
publicvoidaverageWeight()
{
weight=6;
System.out.println("北京人的平均体重:"+weight+"公斤");
}
【代码12】:System.out.println("京剧术语");
2、读懂下面模板代码,按要求补充程序并调试运行。掌握抽象类的定义及其实现方法,学习上转型对象的运用方法。
abstractclassEmployee
{
publicabstractdoubleearnings();
}
classYearWorkerextendsEmployee
{
【代码1】//重写earnings()方法
}
classMonthWorkerextendsEmployee
{
【代码2】//重写earnings()方法。
}
classWeekWorkerextendsEmployee
{
【代码3】//重写earnings()方法。
}
classCompany
{
Employee[]employee;
doublesalaries=0;
Company(Employee[]employee)
{
this.employee=employee;
}
publicdoublesalariesPay()
{
salaries=0;
【代码4】//计算salaries。
returnsalaries;
}
}
publicclassHardWork
{
publicstaticvoidmain(Stringargs[])
{
Employee[]employee=newEmployee[20];
for(inti=0;i { if(i%3==0) employee[i]=newWeekWorker(); elseif(i%3==1) employee[i]=newMonthWorker(); elseif(i%3==2) employee[i]=newYearWorker(); } Companycompany=newCompany(employee); System.out.println("公司年工资总额:"+company.salariesPay()); } } 通过编译得出如下答案: 【代码1】: publicdoubleearnings() { return50000.456; } 【代码2】: publicdoubleearnings() {