北京信息科技大学Java语言程序设计-抽象类和接口_第1页
北京信息科技大学Java语言程序设计-抽象类和接口_第2页
北京信息科技大学Java语言程序设计-抽象类和接口_第3页
北京信息科技大学Java语言程序设计-抽象类和接口_第4页
北京信息科技大学Java语言程序设计-抽象类和接口_第5页
已阅读5页,还剩9页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验4抽象类和接口

【实验宗旨】

天天做一点编程练习。

【实验目的】

1.学习和掌握Java抽象类的定义和使用。

2.学习和掌握Java接口的定义和使用。

3.进一步学习和掌握通用程序设计方法。

【实验环节(解题过程)】

参见实验2。

【实验内容】

1.(CompareableCirlce类)创建名为CompareableCircle类,它扩展Circle类并

实现Compareable接口。画出UML图,实现compareTo方法,使其可以根据面积比

较两个圆。编写一个测试程序求出CompareableCircle对象的两个实例中的较大

者。

说明:⑴来源编程练习14.2(P399))o⑵java.lang.Compareable接口参见14.5

小节(P378)。⑶Circle类的实现,参见程序清单:1.2(P303)。

【实验预习】

1.问题描述:该题描述的是创建一个Compareab1eCirc1e类来实现两个圆的比

较。

创建两个Compareab1eCirc1e类的实例,运用Comparable接口,并调用

Comparab1eMax77法实现。

【附程序代码】

@SupprcssWarnings("unchecked")

publicclasstestConparcab1eCirc1e(

//主方法

publicstaticvoidmain(String[]args){

Compareab1eCirc1eCl=newCompareableCircle(10);

CompareableCircleC2=newCompareab1eCircle(3);

System,out.printlnC'ThemaxniumCircleis

,,+Comparab1eMax(C1,C2)+"的圆");

)

〃比较两个圆的大小

publicstaticComparableComparab1eMax(ComparableCl,Comparable

C2)

(

if(Cl.compareTo(C2)>0)

returnCl;

elsereturnC2;

}

}

publicclassCompareab1eCirc1eextendsCircleimplementsComparable{

〃建立个指定半径的圆

CompareableCircle(doubleradius){

super(radius!;

)

//Comparab1。接口的方法

publicintcompareTo(Objecto){

if(getAreaOX(CompareableCircle)o).getArea())

return1;

elseif(getArea0<((CompareableCircle)o).getAreaO)

return-1;

elsereturn0;

)

)

publicclassCircleextendsGeometricObjectl{

privatedoubleradius;

publicCircle(){

)

publicCircle(doubleradius){

this.radius=radius;

//返回半径

publicdoublegetRadius()(

returnradius;

}

〃设立一个新的半径

publicvoidsetRadius(doubleradius){

this.radius=radius;

}

〃返回圆的面积

publicdoublegetAreaO{

returnradius*radius*Math.PI;

}

〃返回圆的直径

publicdoublegetDiameter(){

return2*radius;

)

〃返回圆的周长

publicdoublegetPcrimeter0{

return2*radius*Math.PI;

)

〃打印圆的信息

publicStringtoStringO{

return''createdin"+getDateCreated()+

〃andtheradiusis"+radius;

}

【Umi图】

CompareabieCircle

<<create>>~CompareableCircle(radius:double)

+compareTo(o:Object):int

【实验过程及运营结果】

在运营过程中碰到的错误是,在写ComparableMax方法时,我写的返回值是

Comparab1eCircle类型。

应当返回值的类型是Comparable类型。这样直接调用了它的ToString方法。

2.(将Circle类变成可比较的)改写程序清单11-2(P303)中的Circle类,它扩

展GeometricObject类(程序清单14T(P371)),

并实现Conipareable接口。覆盖Object类中的equals方法。当两个Circle对象所

表达的圆的半径相等时,则这两个对象是相同的。画出涉及Circle、

GeometricObject和Conpareb1e的UML图。编写测试程序,判断两个圆是否相同。

假如不同,按照练习1的思绪,比较两个圆对象的大小。(来源:编程练习14.5

(P399))O

【实验预习】

1.问题描述:创建Circle类,比较两个圆的大小。

创建两个Circle类的实例,调用CompareTo方法和equals方法,比较两个圆的大

小。

【附程序代码】

publicclasstestCircle2(

publicstaticvoidmain(String[]args){

Circle!Cl=newCirclel(2):〃建立一个半径为2的圆

CirclelC2=newCirclel(3);〃建立一个半径为3的圆

System.out.println(Cl.equals(C2));

System,out.printin(Cl.compareTo(C2);

)

)

publicclassCirclelextendsGeometricObjectimplementsComparable{

privatedoubleradius;

publicCirclel0(

)

publicCirclel(doubleradius){

this.radius=radius;

)

〃返回半径

publicdoublegetRadius(){

returnradius;

)

〃设立一个新的半径

publicvoidsetRadius(doubleradius){

this.radius=radius;

)

〃返回圆的面积

publicdoublegetArea(){

returnradius*radius*Math.PI;

)

〃返回圆的直径

publicdoublegetDiameter(){

return2*radius;

〃返回圆的周长

publicdoublegetPerimeter(){

return2*radius*Math.PI;

)

〃打卬圆的信息

publicStringtoStringO{

return"createdin"+getDateCreatedO+

〃andtheradiusis〃+radius;

)

//Comparab1e接口的方法

publicintcompareTo(Objecto){

if(this.getAreaO>((Circlel)o).getAreaO)

return1;

elseif(this.getAreaO<((Circle1)o).getAreaO)

return-1;

else

return0;

)

〃覆盖Object中的equals方法

publicbooleanequals(Objecto){

returnthis.getAreaO==((Circlel)o).getAreaO;

)

}

【UML图】

Geom*tncObj«ct

•colorSsnng

皿,booUan

■d4»O««»d:j«v«.uci.DM

»Geom«ncObj«ctCi

»G<o*r<ricObj«c<cotor:ScregfJWd:,bootean)

♦9«rColofO:Svr«g

♦wcColoKcoloriSchng):void

♦sRM):booiMn

♦MCRkd(阳:booWan;:V<M1

*9«tD»9eOMMdO:

*9*tAnwO:doubh

*9«cAf«aO:double

♦9«c^«r*rworO:doubW

【实验过程与运营结果】

在实验过程中,不会编写equals的覆盖方法。

解决方法:应当是写成;publicbooleanequals(Objecto){

returnthis.getAreaO==((Circlel)o).getAreaO;)

3.(求几何对象的面积之和)编写一个方法.求数组中所有几何对象的面积之和。

方法署名如下:

publicstaticdoublesumArea(GeometricObject[]a)

编写测试程序,创建4个对象(两个圆形和两个矩形)的数组,然后使用sumArea

方法求它们的总面积。

说明:⑴来源:编程练习14.8(P400);⑵分别实现GeometricObject类(程序

清单14T(P372))、Rectangle类(程序清单11-3(P305))和Circle类(程序清

单11-2(P303));⑶建立GeometricObject类层次结构(图14-2(P372))。

【附程序代码】

publicclassArea{

publicstaticvoidmain(String[]args){

newAreaO;

}

publicAreaO(

GeometricObject[]a={newCircle(5),newCircle(6),

newRectangle;2,3),newRectangle(2,3)};

System,out.print!n(,,Thetotalareais"+sumArea(a));

)

publicstaticdoublesumArea(GeometricObject[]a){

doublesum=0;

for(inti=0;i<a.length;i++)

sum+=a[i].getAreaO;

returnsum;

)

〃矩形类

classRectangleextendsGeometricObject{

privatedoublewidth;

privatedoubleheight;

〃创建一个指定长和宽的矩形

publicRectangle(doublewidth,doubleheight){

this.width=width;

this.height=height;

)

〃返回矩形的宽

publicdoublegetWidthO{

returnwidth;

)

〃设定矩形的宽

publicvoidsetWidth(doublewidth){

this,width=width;

)

〃返回举矩形的高

publicdoublegetHeight(){

returnheight;

)

〃设定矩形的高

publicvoidsctHeight(doubleheight){

this,height=height;

)

〃返回矩形面积

publicdoublegetArea(){

returnwidth*height;

)

〃求矩形的周长

publicdoublegetPerimeter(){

return2*(width+height);

〃覆盖equals方法

publicbooleanequals(Rectanglerectangle){

return(width==rectangle.getWidth())&&

(height==rectangle.getHeightO);

)

〃返回基本信息

publicStringtoStringO{

return[Rectangle]width="+width-

〃andheight=〃+height;

【运营结果】

【思考题】

1.练习1和练习2中,使用了不同的方法建立了可比较的Circle类。结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论