java程序设计课程实验报告实验 1.docx
- 文档编号:26092410
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:15
- 大小:38.64KB
java程序设计课程实验报告实验 1.docx
《java程序设计课程实验报告实验 1.docx》由会员分享,可在线阅读,更多相关《java程序设计课程实验报告实验 1.docx(15页珍藏版)》请在冰豆网上搜索。
java程序设计课程实验报告实验1
《Java开发技术》实验报告
实验序号:
实验13 实验项目名称:
继承
学 号
姓 名
专业、班
实验地点
实1-316
指导教师
实验时间
2012-12-5
一、实验目的及要求
●理解继承的基本概念
●理解继承与可见性
●掌握继承的设计
二、实验设备(环境)及要求
PC机,windowsxp,软件环境(jdk1.6,tomcatweb服务器,Eclipse)
●硬件要求:
CPUPII以上,64M内存,100M硬盘空间。
●软件要求:
WindowsXP,IE5以上。
●开发环境:
JDK1.6.0_10
三、实验内容与步骤
修改类继承中的错误
文件Dog.java声明了一个Dog类,文件Labrador.java和Yorkshire.java是两个继承自Dog的类,文件DogTest.java是一个简单的驱动程序。
将文件保存至本地磁盘并仔细阅读。
按照以下步骤对上述程序进行修改:
1.在DogTest.java文件中添加语句,要求在创建和打印Dog对象之后,还要创建和打印Yorkshire和Labrador对象。
注意Labrador构造器有两个参数:
name和color,都是字符串类型。
不要修改DogTest之外的任何文件,重新编译DogTest.java,观察碰到的错误。
然后修改相应文件来修正该错误。
2.在DogTest.java中添加代码,打印Labrador和Yorkshire两个类的平均种群重量。
提示:
使用avgBreedWeight()方法。
在编译中如果遇到错误,请解决该错误,并给出正确结果。
3.添加一个抽象方法intavgBreedWeight()至Dog.java。
注意这就意味着需要使用关键字abstract来描述avgBreedWeight()方法,并且该方法没有方法体。
重新编译所有程序,记录编译中出现的错误,以及解决的方法。
DogTest.java源代码如下:
publicclassDogTest{
publicstaticvoidmain(String[]args){
Yorkshireyorkshire=newYorkshire("xiaohei");
Labradorlabrador=newLabrador("xiaobai","white");
System.out.println(yorkshire.getName()+"says"+yorkshire.speak());
System.out.println(labrador.getName()+"says"+labrador.speak());
System.out.println(yorkshire.getName()+
"BreedWeight"+yorkshire.avgBreedWeight()+"says"+yorkshire.speak());
System.out.println(labrador.getName()+
"BreedWeight"+labrador.avgBreedWeight()+"says"+labrador.speak());
}
}
Yorkshire.java源代码如下:
publicclassYorkshireextendsDog{
privateintbreedWeight=50;
publicYorkshire(Stringname){
super(name);
}
publicStringspeak(){
return"woof";
}
publicintavgBreedWeight(){
returnbreedWeight;
}
}
Labrador.java源代码如下:
publicclassLabradorextendsDog{
privateStringcolor;//black,yellow,orchocolate?
privateintbreedWeight=75;
publicLabrador(Stringname,Stringcolor){
super(name);
this.color=color;
}
publicStringspeak(){
return"WOOF";
}
publicintavgBreedWeight(){
returnbreedWeight;
}
}
Dog.java源代码如下:
publicabstractclassDog{
protectedStringname;
publicDog(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicStringspeak(){
return"Woof";
}
publicabstractintavgBreedWeight();
}
设计类继承
1.编写一个抽象类(Shape),长方形、三角形和圆形均为其子类,并各有各的属性。
其父类中有计算周长和面积的方法。
在测试类中,分别建立如干个对象,计算并输出各对象的周长和面积。
Shape.java源代码如下:
publicclassShape{
privatedoublearea;
privatedoublecircumference;
//图形类的构造函数
publicShape(){
area=0;
circumference=0;
}
//返回图形的面积
publicdoublegetarea(){
returnarea;
}
//返回图形的周长
publicdoublegetcircumference(){
returncircumference;
}
}
Rectangle.java源代码如下:
publicclassRectangleextendsShape{
privatedoublelength;
privatedoublewidth;
privatedoublearea;
privatedoublecircumference;
//长方形类的构造函数1,对长和宽赋值
publicRectangle(doublel,doublew){
length=l;
width=w;
area=l*w;
circumference=2*(l+w);
}
//长方形类的构造函数2,对长和宽赋值
publicRectangle(intl,intw){
length=(double)l;
width=(double)w;
area=length*width;
circumference=2*(length+width);
}
//长方形类的构造函数3,对长和宽赋值
publicRectangle(Stringl,Stringw){
length=Double.parseDouble(l);
width=Double.parseDouble(w);
area=length*width;
circumference=2*(length+width);
}
//返回长方形的长
publicdoublegetlength(){
returnlength;
}
//返回长方形的宽
publicdoublegetwidth(){
returnwidth;
}
//返回长方形的面积
publicdoublegetarea(){
returnarea;
}
//返回长方形的周长
publicdoublegetcircumference(){
returncircumference;
}
//重新定义equals方法
publicbooleanequals(ObjectotherObject){
if(this==otherObject)
returntrue;
if(otherObject==null)
returnfalse;
if(getClass()!
=otherObject.getClass())
returnfalse;
Rectangleother=(Rectangle)otherObject;
returnlength==other.length&&width==other.width
&&area==other.area&&circumference==other.circumference;
}
//重新定义hashCode方法
publicinthashCode(){
return(newDouble(this.width).hashCode()+newDouble(this.length).hashCode());
}
//重新定义toString方法
publicStringtoString(){
return"长:
"+length+"宽:
"+width+"面积:
"+area+"周长"+circumference;
}
}
Triangle.java源代码如下:
publicclassTriangleextendsShape{
privatedoublecircumference;
privatedoublearea;
privatedoubleedge1;
privatedoubleedge2;
privatedoubleedge3;
//三角形类的构造函数,对三角形各边赋值
publicTriangle(doubleE1,doubleE2,doubleE3){
doublep,q;
edge1=E1;
edge2=E2;
edge3=E3;
circumference=edge1+edge2+edge3;
p=0.5*(edge1+edge2+edge3);
q=p*(p-edge1)*(p-edge2)*(p-edge3);
area=Math.sqrt(q);
}
//返回边1的长?
publicdoublegetedge1(){
returnedge1;
}
//返回边2的长?
publicdoublegetedge2(){
returnedge2;
}
//返回边3的长?
publicdoublegetedge3(){
returnedge3;
}
//返回三角形的面积
publicdoublegetarea(){
returnarea;
}
//返回三角形的周长
publicdoublegetcircumference(){
returncircumference;
}
//重新定义equals方法
publicbooleanequals(ObjectotherObject){
if(this==otherObject)
returntrue;
if(getClass()!
=otherObject.getClass())
returnfalse;
if(otherObject==null)
returnfalse;
Triangleother=(Triangle)otherObject;
returnedge1==other.edge1
&&edge2==other.edge2
&&edge3==other.edge3
&&area==other.area
&&circumference==other.circumference;
}
//重新定义hashCode方法
publicinthashCode(){
return(newDouble(this.edge1).hashCode()+newDouble(this.edge2).hashCode()+newDouble(this.edge3).hashCode());
}//重新定义toString方法
publicStringtoString(){
return"边1:
"+edge1+"边2:
"+edge2+"边3:
"+edge3+"面积:
"+area+"周长"+circumference;
}
}
Circle.java源代码如下:
publicclassCircleextendsShape{
doubleradius;
doublepi=3.14;
privatedoublearea;
privatedoublecircumference;
//圆形类的构造函数
publicCircle(doubler){
radius=r;
area=pi*r*r;
circumference=2*pi*r;
}
//返回圆的半径
publicdoublegetradius(){
returnradius;
}
//返回圆的面积
publicdoublegetarea(){
returnarea;
}
//返回圆的周长
publicdoublegetcircumference(){
returncircumference;
}
publicbooleanequals(ObjectotherObject){
if(this==otherObject)
returntrue;
if(getClass()!
=otherObject.getClass())
returnfalse;
if(otherObject==null)
returnfalse;
Circleother=(Circle)otherObject;
returnradius==other.radius
&&pi==other.pi
&&area==other.area
&&circumference==other.circumference;
}
publicinthashCode(){
return(newDouble(this.radius).hashCode());
}
publicStringtoString(){
return"半径:
"+radius+"面积:
"+area+"周长"+circumference;
}
}
Test.java源代码如下:
/**
*Test类的数组实现*/
publicclassTest{
publicstaticvoidmain(String[]args){
doublesumArea;
doublesumCircumference;
Shape[]s=newShape[3];
s[0]=newRectangle(3,4);
//定义一个长方形r1,长为3,宽为4
s[1]=newCircle
(2);
s[2]=newTriangle(2,6,5);
for(Shapeelement:
s)
System.out.println(element);
sumArea=s[0].getarea()+s[1].getarea()+s[2].getarea();
sumCircumference=s[0].getcircumference()+
s[1].getcircumference()+s[2].getcircumference();
System.out.println("总面积:
"+sumArea+",总周长:
"+sumCircumference);
}
}
2.
XX文库-让每个人平等地提升自我
(1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x和y值的public方法。
Point.java源代码如下:
publicclassPoint{
floatx,y;
publicPoint(floata,floatb){
x=a;
y=b;
}
publicvoidsetPoint(floatx,floaty){
this.x=x;
this.y=y;
}
publicfloatgetX(){
returnx;
}
publicfloatgetY(){
returny;
}
publicstaticvoidmain(String[]args){
Pointp1=newPoint(12,20);
System.out.println("x的坐标为:
"+p1.getX());
System.out.println("y的坐标为:
"+p1.getY());
}
}
(2).设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的public方法、计算圆面积的public方法。
NCircle.java源代码如下:
publicclassNCircleextendsPoint{
protectedfloatradius;
//finalfloatPI=3.14;
publicNCircle(floata,floatb,floatr){
super(a,b);
radius=r;
}
publicvoidsetCircle(floatr){
radius=r;
}
floatgetRadius(){
returnradius;
}
doublearea(){
return3.14*radius*radius;
}
publicstaticvoidmain(String[]args){
NCirclec1=newNCircle(3,4,5);
System.out.println("半径为:
"+c1.getRadius()+"面积为:
"+c1.area());
}
}
(3).设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。
(4).建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。
Cylinder.java源代码如下:
publicclassCylinderextendsNCircle{
floatheigh;
publicCylinder(floata,floatb,floatr,floath){
super(a,b,r);
heigh=h;
}
voidsetHeigh(floath){
heigh=h;
}
floatgetHeigh(){
returnheigh;
}
doublevolume(){
returnsuper.area()*heigh;
}
publicstaticvoidmain(String[]args){
Cylinderc=newCylinder(3,4,5,6);
Cylinderc1=newCylinder(4,5,6,7);
Cylinderc2=newCylinder(5,6,7,8);
System.out.println("面积为:
"+c.volume());
System.out.println("轴心坐标为:
"+c1.getX()+","+c1.getY()+"半径为:
"+c1.getRadius()+"高为:
"+c1.getHeigh()+"体积为:
"+c1.volume());
System.out.println("轴心坐标为:
"+c2.getX()+","+c2.getY()+"半径为:
"+c2.getRadius()+"高为:
"+c2.getHeigh()+"体积为:
"+c2.volume());
}
}
实验要求:
.每个类包含无参数和有参数的构造方法。
构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
.子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。
.方法名自定;
四、实验结果与数据处理
1修改类继承中的错误如下图:
1.输出各对象的周长和面积的结果如下:
1.获取和设置x和y值的public方法的结果如下:
2.计算圆面积的结果如下:
3.计算圆柱体体积的结果如下:
4.输出其轴心位置坐标、半径、高及其体积的值的结果如下:
五、分析与讨论
五、分析与讨论
通过本次实验,学会了使用super引用调用父类的构造方法。
知道了抽象类代表的是一种概念,子类将基于这种概念来定义方法,因此抽象类不能实例化,并且进一步的理解了如何设计类间的层次结构。
六、教师评语
签名:
日期:
成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java程序设计课程实验报告实验 java 程序设计 课程 实验 报告