实验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()); } }
四、实验难点: 接口的定义和运用。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库Java实验7抽象类和接口在线全文阅读。
相关推荐: