还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《J__a__技术》实验报告实验序号实验13 实验项目名称继承学 号姓 名专业、班实验地点实1-316指导教师实验时间2012-12-5实验目的及要求理解继承的基本概念理解继承与可见性掌握继承的设计
二、实验设备(环境)及要求PC机,windowsxp,软件环境(jdk
1.6,tomcatweb服务器,Eclipse)硬件要求CPUPII以上,64M内存,100M硬盘空间软件要求WindowsXP,IE5以上__环境JDK
1.
6.0_10
三、实验内容与步骤修改类继承中的错误文件Dog.j__a声明了一个Dog类,文件Labrador.j__a和Yorkshire.j__a是两个继承自Dog的类,文件DogTest.j__a是一个简单的驱动程序将文件保存至本地磁盘并仔细阅读按照以下步骤对上述程序进行修改
1.在DogTest.j__a文件中添加语句,要求在创建和打印Dog对象之后,还要创建和打印Yorkshire和Labrador对象注意Labrador构造器有两个参数name和color,都是字符串类型不要修改DogTest之外的任何文件,重新编译DogTest.j__a,观察碰到的错误然后修改相应文件来修正该错误
2.在DogTest.j__a中添加代码,打印Labrador和Yorkshire两个类的平均种群重量提示使用__gBreedWeight方法在编译中如果遇到错误,请解决该错误,并给出正确结果
3.添加一个抽象方法int__gBreedWeight至Dog.j__a注意这就意味着需要使用关键字abstract来描述__gBreedWeight方法,并且该方法没有方法体重新编译所有程序,记录编译中出现的错误,以及解决的方法DogTest.j__a源代码如下publicclassDogTest{publicstaticvoid__inString[]args{Yorkshireyorkshire=newYorkshirexiaohei;Labradorlabrador=newLabradorxiaobaiwhite;System.out.printlnyorkshire.getName+says+yorkshire.speak;System.out.printlnlabrador.getName+says+labrador.speak;System.out.printlnyorkshire.getName+BreedWeight+yorkshire.__gBreedWeight+says+yorkshire.speak;System.out.printlnlabrador.getName+BreedWeight+labrador.__gBreedWeight+says+labrador.speak;}}Yorkshire.j__a源代码如下publicclassYorkshireextendsDog{privateintbreedWeight=50;publicYorkshireStringname{supername;}publicStringspeak{returnwoof;}publicint__gBreedWeight{returnbreedWeight;}}Labrador.j__a源代码如下publicclassLabradorextendsDog{privateStringcolor;//blackyelloworchocolateprivateintbreedWeight=75;publicLabradorStringnameStringcolor{supername;this.color=color;}publicStringspeak{returnWOOF;}publicint__gBreedWeight{returnbreedWeight;}}Dog.j__a源代码如下publicabstractclassDog{protectedStringname;publicDogStringname{this.name=name;}publicStringgetName{returnname;}publicStringspeak{returnWoof;}publicabstractint__gBreedWeight;}设计类继承编写一个抽象类Shape,长方形、三角形和圆形均为其子类,并各有各的属性其父类中有计算周长和__的方法在测试类中,分别建立如干个对象,计算并输出各对象的周长和__Shape.j__a源代码如下publicclassShape{privatedoublearea;privatedoublecircumferen__;//图形类的构造函数publicShape{area=0;circumferen__=0;}//返回图形的__publicdoublegetarea{returnarea;}//返回图形的周长publicdoublegetcircumferen__{returncircumferen__;}}Rectangle.j__a源代码如下publicclassRectangleextendsShape{privatedoublelength;privatedoublewidth;privatedoublearea;privatedoublecircumferen__;//长方形类的构造函数1,对长和宽赋值publicRectangledoubleldoublew{length=l;width=w;area=l*w;circumferen__=2*l+w;}//长方形类的构造函数2,对长和宽赋值publicRectangleintlintw{length=doublel;width=doublew;area=length*width;circumferen__=2*length+width;}//长方形类的构造函数3,对长和宽赋值publicRectangleStringlStringw{length=Double.parseDoublel;width=Double.parseDoublew;area=length*width;circumferen__=2*length+width;}//返回长方形的长publicdoublegetlength{returnlength;}//返回长方形的宽publicdoublegetwidth{returnwidth;}//返回长方形的__publicdoublegetarea{returnarea;}//返回长方形的周长publicdoublegetcircumferen__{returncircumferen__;}//重新定义equals方法publicbooleanequalsO__ectotherO__ect{ifthis==otherO__ectreturntrue;ifotherO__ect==nullreturnfalse;ifgetClass!=otherO__ect.getClassreturnfalse;Rectangleother=RectangleotherO__ect;returnlength==other.lengthwidth==other.widtharea==other.areacircumferen__==other.circumferen__;}//重新定义hashCode方法publicinthashCode{returnnewDoublethis.width.hashCode+newDoublethis.length.hashCode;}//重新定义toString方法publicStringtoString{return长:+length+宽:+width+__:+area+周长+circumferen__;}}________.j__a源代码如下publicclass________extendsShape{privatedoublecircumferen__;privatedoublearea;privatedoubleedge1;privatedoubleedge2;privatedoubleedge3;//三角形类的构造函数,对三角形各边赋值public________doubleE1doubleE2doubleE3{doublepq;edge1=E1;edge2=E2;edge3=E3;circumferen__=edge1+edge2+edge3;p=
0.5*edge1+edge2+edge3;q=p*p-edge1*p-edge2*p-edge3;area=__th.sqrtq;}//返回边1的长publicdoublegetedge1{returnedge1;}//返回边2的长publicdoublegetedge2{returnedge2;}//返回边3的长publicdoublegetedge3{returnedge3;}//返回三角形的__publicdoublegetarea{returnarea;}//返回三角形的周长publicdoublegetcircumferen__{returncircumferen__;}//重新定义equals方法publicbooleanequalsO__ectotherO__ect{ifthis==otherO__ectreturntrue;ifgetClass!=otherO__ect.getClassreturnfalse;ifotherO__ect==nullreturnfalse;________other=________otherO__ect;returnedge1==other.edge1edge2==other.edge2edge3==other.edge3area==other.areacircumferen__==other.circumferen__;}//重新定义hashCode方法publicinthashCode{returnnewDoublethis.edge
1.hashCode+newDoublethis.edge
2.hashCode+newDoublethis.edge
3.hashCode;}//重新定义toString方法publicStringtoString{return边1:+edge1+边2:+edge2+边3:+edge3+__:+area+周长+circumferen__;}}Circle.j__a源代码如下publicclassCircleextendsShape{doubleradius;doublepi=
3.14;privatedoublearea;privatedoublecircumferen__;//圆形类的构造函数publicCircledoubler{radius=r;area=pi*r*r;circumferen__=2*pi*r;}//返回圆的半径publicdoublegetradius{returnradius;}//返回圆的__publicdoublegetarea{returnarea;}//返回圆的周长publicdoublegetcircumferen__{returncircumferen__;}publicbooleanequalsO__ectotherO__ect{ifthis==otherO__ectreturntrue;ifgetClass!=otherO__ect.getClassreturnfalse;ifotherO__ect==nullreturnfalse;Circleother=CircleotherO__ect;returnradius==other.radiuspi==other.piarea==other.areacircumferen__==other.circumferen__;}publicinthashCode{returnnewDoublethis.radius.hashCode;}publicStringtoString{return半径:+radius+__:+area+周长+circumferen__;}}Test.j__a源代码如下/***Test类的数组实现*/publicclassTest{publicstaticvoid__inString[]args{doublesu__rea;doublesumCircumferen__;Shape[]s=newShape
[3];s
[0]=newRectangle34;//定义一个长方形r1,长为3,宽为4s
[1]=newCircle2;s
[2]=new________265;forShapeelement:sSystem.out.printlnelement;su__rea=s
[0].getarea+s
[1].getarea+s
[2].getarea;sumCircumferen__=s
[0].getcircumferen__+s
[1].getcircumferen__+s
[2].getcircumferen__;System.out.println总__:+su__rea+总周长:+sumCircumferen__;}}
2.1设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x和y值的public方法Point.j__a源代码如下publicclassPoint{floatxy;publicPointfloatafloatb{x=a;y=b;}publicvoidsetPointfloatxfloaty{this.x=x;this.y=y;}publicfloatgetX{returnx;}publicfloatgetY{returny;}publicstaticvoid__inString[]args{Pointp1=newPoint1220;System.out.printlnx的坐标为+p
1.getX;System.out.printlny的坐标为+p
1.getY;}}2.设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的public方法、计算圆__的public方法NCircle.j__a源代码如下publicclassNCircleextendsPoint{protectedfloatradius;//finalfloatPI=
3.14;publicNCirclefloatafloatbfloatr{superab;radius=r;}publicvoidsetCirclefloatr{radius=r;}floatgetRadius{returnradius;}doublearea{return
3.14*radius*radius;}publicstaticvoid__inString[]args{NCirclec1=newNCircle345;System.out.println半径为+c
1.getRadius+__为+c
1.area;}}3.设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法4.建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值Cylinder.j__a源代码如下publicclassCylinderextendsNCircle{floatheigh;publicCylinderfloatafloatbfloatrfloath{superabr;heigh=h;}voidsetHeighfloath{heigh=h;}floatgetHeigh{returnheigh;}doublevolume{returnsuper.area*heigh;}publicstaticvoid__inString[]args{Cylinderc=newCylinder3456;Cylinderc1=newCylinder4567;Cylinderc2=newCylinder5678;System.out.println__为+c.volume;System.out.println轴心坐标为+c
1.getX++c
1.getY+半径为+c
1.getRadius+高为+c
1.getHeigh+体积为+c
1.volume;System.out.println轴心坐标为+c
2.getX++c
2.getY+半径为+c
2.getRadius+高为+c
2.getHeigh+体积为+c
2.volume;}}实验要求.每个类包含无参数和有参数的构造方法构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值.子类的构造方法调用父类的构造方法,对父类中的成员变量初始化.方法名自定;
四、实验结果与数据处理1修改类继承中的错误如下图
1.输出各对象的周长和__的结果如下
1.获取和设置x和y值的public方法的结果如下
2.计算圆__的结果如下
3.计算圆柱体体积的结果如下
4.输出其轴心位置坐标、半径、高及其体积的值的结果如下
五、分析与讨论
五、分析与讨论通过本次实验,学会了使用super引用调用父类的构造方法知道了抽象类代表的是一种概念,子类将基于这种概念来定义方法,因此抽象类不能实例化,并且进一步的理解了如何设计类间的层次结构
六、教师评语签名日期成绩。