Java实验7抽象类和接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验6

抽象类和接口

一、实验目的:

1、学习掌握抽象类的概念和使用方法。

2、学习掌握接口的概念和定义接口的方法。

3、学习使用Cloneable接口和clone方法进行对象内容的复制。

4、理解浅复制和深复制的概念,掌握覆盖clone方法进行对象内容深复制的

技术。

二、实验任务:

1、学习掌握抽象类的概念和使用方法。程序要求:

(1)首先创建一个类家族,其中抽象类几何图形类GeometricObject为父类,圆类Circle和矩形类Rectangle为子类。几何图形类

GeometricObject中定义保护型字符串变量color,表示图形的颜色;

该类要具备构造方法和两个抽象方法findArea和findPerimeter,抽

象方法findArea求图形面积,抽象方法findPerimeter求图形周长。

(2)Circle类和Rectangle类是GeometricObject类的子类,其中应实现父类的抽象方法。

(3)程序主方法中创建两个几何对象,一个圆和一个矩形,并用GeometricObject类的引用变量引用它们,调用抽象方法。

2、学习接口的概念和利用接口实现多态的方法。程序要求如下:

(1)首先创建圆类Circle和圆柱体类Cylinder,其中Circle类是父类,Cylinder类是子类;

(2)创建接口Comparable,其中包含一个抽象方法compareTo,用来比较对象的大小。抽象方法compareTo的形式如下:

public int compareTo(Object o);

(3)创建类ComparableCircle,该类为Circle类的子类,并实现Comparable接口。

(4)创建类ComparableCylinder,该类为Cylinder类的子类,并实现Comparable接口。

(5)创建通用类Max,其中包含通用方法max,只要类实现了Comparable接口,就可以使用max方法返回两个对象中较大的一

个。Max方法的方法名称为:

public static Comparable max(Comparable o1, Comparable o2) (6)程序的主方法中分别创建两个ComparableCircle类对象和两个ComparableCylinder类对象,并分别以它们为参数调用max方法,

返回两个对象中面积较大的一个。

3、选做题:进一步深入学习多态特性以及利用Cloneable接口和clone方法

实现对象内容的拷贝,并学习消除浅拷贝(浅复制)的方法。程序要求如下:(1)创建Circle类,表示圆;

(2)创建Name类,表示人名,其中包含三个String类型的数据成员:firstName,middlName和lastName。

(3)创建CloneableCircle类,CloneableCircle类是Circle类的子类,并

实现了Cloneable接口。要求CloneableCircle类中有一个Name类

型的数据成员creator,代表圆对象的创建者姓名。

(4)在CloneableCircle类中实现clone方法,以实现两个CloneableCircle 类对象内容的克隆。要求实现对象内容深拷贝(深复制)。

(5)为了实现CloneableCircle类对象的深拷贝,Name类也应该实现Cloneable接口,并实现clone方法。

(6)程序的主方法中使用clone方法完成两个CloneableCircle类对象的深拷贝。

三、实验步骤:

1.参考代码:

abstract class GeometricObject

{

protected String color;

protected double weight;

protected GeometricObject(String color, double weight)

{

this.color = color;

this.weight = weight;

}

public abstract double findArea();

public abstract double findPerimeter();

}

class Circle extends GeometricObject

{

protected double radius;

public Circle(double radius)

{

super("white", 1.0);

this.radius = radius;

}

public double findArea()

{

return radius*radius*Math.PI;

}

public double findPerimeter()

{

return 2*radius*Math.PI;

}

}

class Rectangle extends GeometricObject

{

protected double width;

protected double height;

public Rectangle(double width, double height)

{

super("white", 1.0);

this.width = width;

this.height = height;

}

public double findArea()

{

return width*height;

}

public double findPerimeter()

{

return 2*(width + height);

}

}

public class TestAb

{

public static void main(String[] args)

{

GeometricObject a1 = new Circle(5);

GeometricObject a2= new Rectangle(5, 3);

test(a1);

test(a2);

}

public static void test(GeometricObject a) {

System.out.println(a.findArea());

}

}

2.参考代码:

//Circle类的实现

class Circle

{

protected double radius;

public Circle()

{

radius=1.0;

}

public Circle(double r)

{

radius=r;

}

相关文档
最新文档