北京信息科技大学Java语言程序的设计_第1页
北京信息科技大学Java语言程序的设计_第2页
北京信息科技大学Java语言程序的设计_第3页
免费预览已结束,剩余6页可下载查看

下载本文档

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

文档简介

1、实验4抽象类和接口【实验宗旨】每天做一点编程练习。【实验目的】1、学习和掌握Java抽象类的定义和使用。2、学习和掌握Java接口的定义和使用。3、进一步学习和掌握通用程序设计方法。【实验步骤(解题过程)】参见实验2。【实验容】1、( CompareableCirlce 类)创建名为 CompareableCircle 类,它扩展 Circle 类并 实现Compareable接口。画出UM图,实现compareTc方法,使其可以根据面积比 较两个圆。编写一个测试程序求出 CompareableCircle对象的两个实例中的较大 者。说明:来源编程练习14.2 (P399)。java.lang

2、.Compareable 接口参见14.5 小节(P378)。Circle类的实现,参见程序清单11.2 ( P303)。【实验预习】1. 问题描述:该题描述的是创建一个 CompareableCircle类来实现两个圆的比 较。2. 创建两个CompareableCircle类的实例,利用Comparable接口,并调用 ComparableMa方 法实现。【附程序代码】SuppressWar nin gs(" un checked") public class testCompareableCircle/主方法public static void main( Stri

3、ngargs) CompareableCircle C仁new CompareableCircle(10); CompareableCircle C2=new CompareableCircle(3);System.out.pri ntl n("Themax niumCircleis"+ComparableMax(C1,C2)+"的圆");/比较两个圆的大小public static Comparable ComparableMax(Comparable C1,Comparable C2)if(CpareTo(C2)>0)return C1;els

4、e return C2;public class CompareableCircle exte nds Circle impleme nts Comparable/建立个指定半径的圆CompareableCircle(double radius)super(radius);/Comparable 接口的方法 public int compareTo(Object o) if(getArea()>(CompareableCircle)o).getArea() return 1;else if(getArea()v(CompareableCircle)o).getArea() return

5、-1;else return 0;public class Circle exte nds GeometricObject1 private double radius;public Circle() public Circle(double radius) this.radius = radius;/返回半径public double getRadius() return radius;/设置一个新的半径public void setRadius(double radius) this.radius = radius;/返回圆的面积public double getArea() retur

6、n radius * radius * Math.PI;/返回圆的直径public double getDiameter() retur n 2 * radius;/返回圆的周长public double getPerimeter() return 2 * radius * Math.PI;/打印圆的信息public Stri ng toStri ng() retur n "created in" + getDateCreated() + "and the radius is " + radius;【Um图】【实验过程及运行结果】E岂匡員:ndovjs

7、.system 521|cmd.e>:e最天朗圆为inThu May 2?CST 201-1 aridralius is 10.e£區LJI在运行过程中遇到的错误是,在写ComparableMaX方法时,我写的返回值是ComparableCircle 类型。应该返回值的类型是Comparable类型。这样直接调用了它的ToString方法。2、(将Circle类变成可比较的)改写程序清单11-2(P303)中的Circle类,它扩 展G eometricObject 类(程序清单 14-1 (P371),并实现Compareable接口。覆盖Object类中的equals方法。

8、当两个Circle对象所 表示的圆的半径相等时,则这两个对象是相同的。画出包括Circle、 GeometricObject和Compareble的UM图。编写测试程序,判断两个圆是否相同。如果不同,按照练习1的思路,比较两个圆对象的大小。(来源:编程练习14.5 (P399)。【实验预习】1问题描述:创建Circle类,比较两个圆的大小。2.创建两个Circle类的实例,调用CompareT方法和equals方法,比较两个圆的 大小。【附程序代码】public class testCircle2public static void main( Stri ngargs)Circle1 C1=

9、new Circle1 (2);/建立一个半径为 2的圆Circle1 C2=new Circle1 (3);/建立一个半径为 3的圆System.out.pri ntln( C1.equals(C2);System.out.pri ntln (CpareTo(C2);public class Circle1 extends GeometricObject implements Comparableprivate double radius;public Circle1() public Circle1(double radius) this.radius = radius;/返回半径publ

10、ic double getRadius() return radius;/设置一个新的半径public void setRadius(double radius) this.radius = radius;/返回圆的面积public double getArea() retur n radius * radius * Math.PI;/返回圆的直径public double getDiameter() retur n 2 * radius;/返回圆的周长public double getPerimeter() return 2 * radius * Math.PI;/打印圆的信息public

11、Stri ng toStri ng() retur n "created in" + getDateCreated() +"and the radius is " + radius;/Comparable 接口的方法public int compareTo(Object o) if (this.getArea() > (Circle1)o).getArea() return 1;else if (this.getArea() < (Circle1)o).getArea() return -1;elsereturn 0;ode/覆盖Object

12、中的equals方法public boolea n equals(Object o) retur n this.getArea() = (Circle1)o).getArea(); 【UM图】domUt 9>nv 恥匸 s«*i对6*: Won*6*tAf«C: doubWsrrpQrt甸亡【实验过程与运行结果】1 “啓沁获総懐魏觀泌熒避陆ISH 苣理员;C:Wi n dov*fssystem 3 2cmd. eKeu回霁E: XjavaJ和多态>jaua testCircle2 False-1E:jauax4ft和多jS>color f0 半二4 L _

13、 PH卜LJ在实验过程中,不会编写equals的覆盖方法。解决方法:应该是写成;public boolea n equals(Object o) retur n this.getArea() = (Circle1)o).getArea();3、(求几何对象的面积之和)编写一个方法,求数组中所有几何对象的面积之和。 方法签名如下:public static double sumArea(GeometricObject a)编写测试程序,创建4个对象(两个圆形和两个矩形)的数组,然后使用 sumArea 方法求它们的总面积。说明:来源:编程练习14.8 ( P4O0 ;分别实现Geometric

14、Object类(程序 清单 14-1( P372)、Rectangle 类(程序清单 11-3(P305)和Circle 类(程序清单 11-2 (P303);建立 GeometricObject 类层次结构(图 14-2 ( P372) 【附程序代码】public class Areapublic static void main( Stri ng args) new Area();public Area() GeometricObject a = new Circle(5), new Circle(6), new Rectangle(2, 3), new Rectangle(2, 3);S

15、ystem.out.pri ntl n("The total area is " + sumArea(a);public static double sumArea(GeometricObject a) double sum = 0;for (int i = 0; i < a.len gth; i+)sum += ai.getArea();return sum;/矩形类class Recta ngle exte nds GeometricObject private double width;private double height;/创建一个指定长和宽的矩形pub

16、lic Recta ngle(double width, double height) this.width = width;this.height = height;/返回矩形的宽public double getWidth() return width;/设定矩形的宽public void setWidth(double width) this.width = width;/返回举矩形的高public double getHeight() retur n height;/设定矩形的高public void setHeight(double height) this.height = hei

17、ght;/返回矩形面积public double getArea() return width*height;/求矩形的周长public double getPerimeter() return 2*(width + height);/ 覆盖equals方法public boolea n equals(Recta ngle recta ngle) return (width = recta ngle.getWidth() && (height = recta ngle.getHeight();/返回基本信息public Stri ng toStri ng() retur n &

18、quot;Recta ngle width = " + width +"and height = " + height;【运行结果】【思考题】1、练习1和练习2中,使用了不同的方法建立了可比较的 Circle类。结合编程实现,说说你对不同设计方案的想法和体会。利用不同的设计方案可易于解决不同的实际问题。2、 练习3中,如果将方法sumArea的参数数组定义为Cirlce,可以实现相应 的功能吗?定义为 Object呢?为什么?结合本题,说说你对通用程序设计的 理解。前者不可以,后者可以。编程就是让计算机为解决某个问题而使用某种程序设计 语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图, 人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式 告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。3、说说抽象类和接口的相同

温馨提示

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

评论

0/150

提交评论