Java实验7抽象类和接口

2020-11-14 09:45

实验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(\ 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(\ 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; }

double getRadius(){return radius;} public double findArea() {

return radius*radius*Math.PI; } }

// Cylinder的实现

class Cylinder extends Circle {

private double length; public Cylinder() {

super(); length = 1.0; }

public Cylinder(double r, double l) {

super(r); length = l; }

public double findArea() {

return 2*super.findArea()+(2*getRadius()*Math.PI)*length; }

public double findVolume() {

return super.findArea()*length; } }

// ComparableCircle类的实现

class ComparableCircle extends Circle implements Comparable {

public ComparableCircle(double r) {

super(r); }

public int compareTo(Object o) {

if (findArea() > ((Circle)o).findArea()) return 1;

else if (findArea() < ((Circle)o).findArea()) return -1; else

return 0;

} }

// ComparableCylinder类的实现

class ComparableCylinder extends Cylinder implements Comparable {

ComparableCylinder(double r, double l) {

super(r, l); }

public int compareTo(Object o) {

if (findVolume() > ((Cylinder)o).findVolume()) return 1;

else if (findVolume() < ((Cylinder)o).findVolume()) return -1; else

return 0; } }

//Max类实现 class Max {

public static Comparable max(Comparable o1, Comparable o2) {

if (o1.compareTo(o2) > 0) return o1; else

return o2; } }

//主函数类的实现

public class TestInterface {

public static void main(String[] args) {

ComparableCircle circle1 = new ComparableCircle(5); ComparableCircle circle2 = new ComparableCircle(4); Comparable circle = Max.max(circle1, circle2); System.out.println(\最大圆半径为: \ ((Circle)circle).getRadius());

ComparableCylinder cylinder1 = new ComparableCylinder(5, 2); ComparableCylinder cylinder2 = new ComparableCylinder(4, 5); Comparable cylinder = Max.max(cylinder1, cylinder2); System.out.println(\最大圆柱体信息: \

((Cylinder)cylinder).getRadius() + \体积:\ ((Cylinder)cylinder).findVolume()); } }

四、实验难点: 接口的定义和运用。


Java实验7抽象类和接口.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:幼儿园最全各项制度汇编

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: