实验4 抽象类和接口 【实验宗旨】
每天做一点编程练习。 【实验目的】
1、学习和掌握Java抽象类的定义和使用。 2、学习和掌握Java接口的定义和使用。 3、进一步学习和掌握通用程序设计方法。 【实验步骤(解题过程)】 参见实验2。 【实验内容】 1、(CompareableCirlce类)创建名为CompareableCircle类,它扩展Circle类并实现Compareable接口。画出UML图,实现compareTo方法,使其可以根据面积比较两个圆。编写一个测试程序求出CompareableCircle对象的两个实例中的较大者。 说明:⑴来源编程练习(P399))。⑵接口参见小节(P378)。⑶Circle类的实现,参见程序清单(P303)。 【实验预习】 1. 问题描述:该题描述的是创建一个CompareableCircle类来实现两个圆的比较。 2. 创建两个CompareableCircle类的实例,利用Comparable接口,并调用
ComparableMax方法实现。 【附程序代码】
@SuppressWarnings(\ public class testCompareableCircle{ etArea()) return 1; else if(getArea()<((CompareableCircle)o).getArea()) return -1; else return 0; } }
public class Circle extends GeometricObject1 { private double radius;
public Circle() { }
public Circle(double radius) { = radius; }
CompareableCircle<
return 1;
else if () < ((Circle1)o).getArea()) return -1; else
return 0; }
etArea(); } }
【UML图】
【实验过程与运行结果】
在实验过程中,不会编写equals的覆盖方法。
解决方法:应该是写成; public boolean equals(Object o) { return () == ((Circle1)o).getArea();} 3、(求几何对象的面积之和)编写一个方法,求数组中所有几何对象的面积之和。方法签名如下:
public static double sumArea(GeometricObject[] a)
编写测试程序,创建4个对象(两个圆形和两个矩形)的数组,然后使用sumArea方法求它们的总面积。
说明:⑴来源:编程练习(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(); }
public Area() {
GeometricObject[] a = {new Circle(5), new Circle(6), new Rectangle(2, 3), new Rectangle(2, 3)};
\ }
public static double sumArea(GeometricObject[] a) { double sum = 0;
for (int i = 0; i < ; i++) sum += a[i].getArea();
return sum; }
相同点
都不能被直接实例化,都可以通过继承实现其抽象方法。 都是面向抽象编程的技术基础,实现了诸多的设计模式。 不同点
接口支持多继承;抽象类不能实现多继承。
接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。
接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。 接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。
接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。
接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
精心搜集整理,只为你的需要