实验4抽象类与接口【实验宗旨】每天做一点编程练习。
【实验目得】1、学习与掌握Java抽象类得定义与使用.2、学习与掌握Java接口得定义与使用。
3、进一步学习与掌握通用程序设计方法。
【实验步骤(解题过程)】参见实验2.【实验内容】1、(pareableCirlce类)创建名为pareableCircle类,它扩展Cir cle类并实现pareable接口。
画出UML图,实现pareTo方法,使其可以根据面积比较两个圆。
编写一个测试程序求出pareableCircle对象得两个实例中得较大者。
说明:⑴来源编程练习14、2(P399))。
⑵java、lang、pareable接口参见14、5小节(P378).⑶Circle类得实现,参见程序清单11、2(P303)。
【实验预习】1.问题描述:该题描述得就是创建一个pareableCircle类来实现两个圆得比较.2.创建两个pareableCircle类得实例,利用parable接口,并调用parableMax方法实现。
【附程序代码】SuppressWarnings(”unchecked")public class testpareableCircle{//主方法ﻩpublic static void main(String[]args){ﻩﻩpareableCircle C1=new pareableCircle(10);ﻩpareableCircle C2=newpareableCircle(3);ﻩﻩSystem、out、println("The maxnium Circle is "+parableMax(C 1,C2)+"得圆");ﻩ}//比较两个圆得大小publicstaticparable parableMax(parableC1,parable C2)ﻩ{ﻩﻩif(C1、pareTo(C2)>0)ﻩﻩreturn C1;ﻩﻩelse return C2;}}public class pareableCircle extends Circle implementsparable{ﻩ//建立个指定半径得圆pareableCircle(double radius){ﻩsuper(radius);}//parable接口得方法public int pareTo(Object o){ﻩif(getArea()〉((pareableCircle)o)、getArea())ﻩreturn 1;ﻩelse if(getArea()<((pareableCircle)o)、getArea())return -1;else return 0;}ﻩ}public class Circle extends 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;}//返回圆得面积publicdouble getArea(){return radius * radius * Math、PI;}//返回圆得直径public double getDiameter() {return2*radius;}//返回圆得周长public double getPerimeter() {return 2* radius * Math、PI;}//打印圆得信息public String toString() {return "created in”+getDateCreated() + " andthe radius is " + radius;}}【Uml图】CompareableCircle<<create>>~CompareableCircle(radius: double)+compareTo(o: Object): int【实验过程及运行结果】在运行过程中遇到得错误就是,在写parableMax方法时,我写得返回值就是parableCircle类型。
应该返回值得类型就是parable类型。
这样直接调用了它得ToString方法. 2、(将Circle类变成可比较得)改写程序清单11-2(P303)中得Circle 类,它扩展G eometricObject类(程序清单14—1(P371)),并实现pareable接口。
覆盖Object类中得equals方法。
当两个Circle对象所表示得圆得半径相等时,则这两个对象就是相同得。
画出包括Circle、Geom etricObject与pareble得UML图.编写测试程序,判断两个圆就是否相同。
如果不同,按照练习1得思路,比较两个圆对象得大小.(来源:编程练习14、5(P399))。
【实验预习】1.问题描述:创建Circle类,比较两个圆得大小。
2.创建两个Circle类得实例,调用pareTo方法与equals方法,比较两个圆得大小。
【附程序代码】public classtestCircle2{public static void main(String[]args){ﻩCircle1C1=new Circle1(2);//建立一个半径为2得圆Circle1 C2=newCircle1(3);//建立一个半径为3得圆ﻩﻩSystem、out、println(C1、equals(C2));ﻩSystem、out、println(C1、pareTo(C2);}}public class Circle1 extends GeometricObject implements parable{private doubleradius;public Circle1() {}public Circle1(doubleradius){this、radius = radius;}//返回半径public double getRadius() {returnradius;}//设置一个新得半径public void setRadius(double radius) {this、radius = radius;}//返回圆得面积publicdoublegetArea() {return radius * radius * Math、PI;}//返回圆得直径public double getDiameter(){return 2 * radius;}//返回圆得周长public double getPerimeter() {return 2 * radius *Math、PI;}//打印圆得信息public String toString(){return "created in" + getDateCreated()+” andthe radius is ” + radius;}//parable接口得方法public int pareTo(Object o){if(this、getArea() > ((Circle1)o)、getArea()) return1;else if (this、getArea() <((Circle1)o)、getArea()) return -1;elsereturn 0;}//覆盖Object中得equals方法public boolean equals(Object o) {return this、getArea()== ((Circle1)o)、getArea(); }}【UML图】【实验过程与运行结果】在实验过程中,不会编写equals得覆盖方法.解决方法:应该就是写成; public boolean equals(Object o) { return this、getArea() == ((Circle1)o)、getArea();}3、(求几何对象得面积之与)编写一个方法,求数组中所有几何对象得面积之与。
方法签名如下:public static double sumArea(GeometricObject[] a)编写测试程序,创建4个对象(两个圆形与两个矩形)得数组,然后使用sumArea 方法求它们得总面积。
说明:⑴来源:编程练习14、8(P400);⑵分别实现Geometric Object 类(程序清单14-1(P372))、Rectangle类(程序清单11-3(P305))与Circle类(程序清单11-2(P303));⑶建立GeometricObject类层次结构(图14-2(P372))。
【附程序代码】public class Area{public static void main(String[] args){new Area();}publicArea(){GeometricObject[]a = {new Circle(5), new Circle(6), new Rectangle(2, 3), new Rectangle(2, 3)};System、out、println("The total area is " +sumArea(a));}public static double sumArea(GeometricObject[]a){ double sum = 0;for (int i = 0;i< a、length; i++)sum += a[i]、getArea();return sum;}//矩形类class Rectangle extends GeometricObject {privatedouble width;private doubleheight;//创建一个指定长与宽得矩形public Rectangle(double width,double height){this、width= width;this、height = height;}//返回矩形得宽public doublegetWidth() {return width;}//设定矩形得宽public void setWidth(doublewidth){this、width = width;}//返回举矩形得高public double getHeight() {return height;}//设定矩形得高public void setHeight(double height) {this、height = height;}//返回矩形面积public double getArea() {return width*height;}//求矩形得周长public double getPerimeter() {return 2*(width + height);}//覆盖equals方法public booleanequals(Rectangle rectangle) {return (width == rectangle、getWidth()) &&(height == rectangle、getHeight());}//返回基本信息public String toString() {return "[Rectangle] width = " + width +" and height =" + height;}}}【运行结果】【思考题】1、练习1与练习2中,使用了不同得方法建立了可比较得Circle类。