联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2018-05-07 10:02

类的继承和接口

1 实验目的

通过本次实验掌握以下知识:

掌握类的继承及其实现方法;

了解接口的基本结构和使用方法。

2 实验内容

2.1 基本说明

本实验要求实现3个部分的程序:

一个名为Shape3D的基础类,并基于Shape3D继承实现一个Box3D类;

一个名为Animal的接口,并基于该接口实现三个类:Dog,Cat,Rabbit;另外,还需根据要求实现一个AnimalFactory类;

Tester类,用于完成测试工作的类。

本次实验按以下要求组织程序代码:

所有程序都必须在demos包中实现,demos中包含两个子包(分别命名为:shapes和animals)和一个Tester类;

与Shape3D类相关的程序必须在demos的子包shapes中实现;

与Animal接口相关的程序必须在demos的子包animals中实现;

Tester类在demos中直接实现。

程序组织如图1所示:

图1. 实验3程序组织结构

2.2 Shape3D类和Box3D类

图2. Shape3D类和Box3D类

Shape3D类是一个概念类,该类可被用于继承并形成其它具体的形状。Box3D类是Shape3D类的一个子类,具体指代一个立方体。Shape3D类和Box3D类的关系如图2所示。图2中有一个名为Point3D的辅助类,该类被用于记录空间中的位置信息,具体为三维坐标系中的坐标值。

2.2.1 Point3D类的定义

本类是一个用于记录三维坐标的辅助类,包含3个属性。定义要求如表4所示:

表4. Point3D类定义信息

定义项名称访问控制类型类型输入输出备注

Point3Dpublicclass

属性xpublicdoubleX轴坐标

属性ypublicdoubleY轴坐标

属性zpublicdoubleZ轴坐标

2.2.2 Shape3D类的定义

Shape3D是一个描述基本形状的类,包含4个属性,1个构建器,5个方法。定义要求如表5所示:

表5. Shape3D类定义信息

定义项名称访问控制类型类型输入输出备注

Shape3Dpublicclass

属性centerprivatePoint3D形状的中心位置

属性widthprivatedouble形状的宽度

属性heightprivatedouble形状的高度

属性depthprivatedouble形状的深度

构建器Shape3Dpublic4个参数4个输入参数分别用于初始化类中的4个属性

方法setCenterpublicPoint3D

方法getCenterpublicPoint3D

方法getWidthpublicdouble

方法getHeightpublicdouble

方法getDepthpublicdouble

表5中定义项的实现要求总结如下:

(1) 属性center

一个形状的中心位置,类型为Point3D。

(2) 属性width

形状的宽度,类型为double。

(3) 属性height

形状的高度,类型为double。

(4) 属性depth

形状的深度,类型为double。

(5) 构建器

使用4个参数,类型分别为1个Point3D,3个double。构建器使用这些参数初始化类中的所有4个属性。

(6) setCenter方法

用于改变形状的中心位置,输入参数为一个Point3D类型的实例。

(7) getCenter方法

用于获得形状的中心位置,返回类型为Point3D。

(8) getWidth方法

用于获得形状的宽度,返回类型为double。

(9) getHeight方法

用于获得形状的高度,返回类型为double。

(10) getDepth方法

用于获得形状的深度,返回类型为double。

2.2.3 Box3D类的定义

Box3D是一个描述立方体的类(注意:立方体的各边都分别平行于三维坐标系中的三个坐标轴,另外立方体的宽度对应于坐标系X轴上的值,高度对应于坐标系Y轴上的值, 深度对应于坐标系Z轴上的值),包含1个构建器,4个方法。定义要求如表6所示:

表6. Box3D类定义信息

定义项名称访问控制类型类型输入输出备注

构建器Box3Dpublic4个参数4个输入参数分别用于初始化类中的4个属性

方法volumepublicdouble

方法surfaceAreapublicdouble

方法overlapspublicBox3Dboolean判别立方体间的重叠关系(注释:本方法为本实验可选实现内容)

方法containspublicBox3Dboolean判别立方体间的包含关系(注释:本方法为本实验可选实现内容)

表6中定义项的实现要求总结如下:

(1) 构建器

使用4个参数,分别类型为1个Point3D,3个double。构建器使用这些参数初始化Box3D类中的所有4个属性。

(2) volume方法

计算立方体的体积,返回值类型为double。

(3) surfaceArea方法

计算立方体的表面积,返回值类型为double。

(4) overlaps方法(注释:本方法为本实验可选实现内容)

判别立方体间的重叠关系。本方法输入参数为一个Box3D类实例,实现时比较两个立方体(本类实例和输入的类实例)是否存在重叠关系(即两个形状存在交集),如果存在返回“真”,否则返回“否”。

本方法实现时可调用Math类中的方法来进行相关数学计算。

(5) contains方法(注释:本方法为本实验可选实现内容)

判别立方体间的包含关系。本方法输入参数为一个Box3D类实例,实现时比较两个立方体(本类实例和输入的类实例)是否存在包含关系,如果存在返回“真”,否则返回“否”。

本方法实现时可调用Math类中的方法来进行相关数学计算。

2.3 Animal接口及其实现类

Animal是一个描述动物的接口,该接口定义了4个方法,具体定义要求如表7所示:

表7. Animal接口定义信息

定义项名称访问控制类型类型输入输出备注

接口Animalpublicinterface

方法getNamepublicString获得动物名称

方法getIDpublicint获得动物编号

方法getNumLegspublicint获得动物的脚个数

方法speakpublic打印结果实现动物发声

2.3.1 Animal接口的实现

基于Animal接口完成3个类:Dog,Cat,Rabbit,基本结构如图3所示。

图3. Animal接口及其实现类

注意,在实现speak方法时,需要显示动物的名称、编号和叫声,例如:

图4. AnimalFactory类

2.3.2 AnimalFactory类

基于设计模式中的“工厂模式”,针对Animal接口构建一个AnimalFactory类(工厂类)。该类与Animal接口及相关实现类的关系如图4所示。

AnimalFactory中包含1个静态属性,1个静态方法,具体定义要求如表8所示:

表8. AnimalFactory定义信息

定义项名称访问控制类型类型输入输出备注

AnimalFactorypublicclass

属性counterprivateint统计实例个数

方法getAnimalpublic3个参数Animal基于3个输入参数产生不同的实例

表8中定义项的实现要求总结如下:

(1) 属性counter

本属性是类中的一个计数器,用于记录创建实例的个数。程序每次通过调用getAnimal方法获得一个类实例时,本计数器增加1。

本属性为静态属性,类型为int。

(2) getAnimal方法

本方法根据输入参数来创建不同的类实例,方法定义为:

public static Animal getAnimal(String type, String name, int legs)

其中,输入参数有三个:

参数type,类型为String,可输入的值为:dog,cat,rabbit。getAnimal方法根据本参数来生成不同的类实例;

参数name,类型为String,用于初始化Animal实现类中的name属性;

参数legs,类型int,用于初始化Animal实现类中的numLegs属性。

本方法为静态方法,返回类型为Animal。另外,本方法在实现时可使用类中的counter属性来初始化Animal实现类中的id属性。本方法使用时,基本情况为:

2.4 Tester类

本类类仅包含一个main方法,完成以下工作:

2.4.1 Box3D类的测试

(1) 创建两个立方体实例

创建两个立方体实例,具体信息为:

表9. 立方体实例信息

实例1实例2

namecenterwidthheightdepthnamecenterwidthheightdepth

box1(10, 5, 0)211box2(0, 0, 0)3.52.51.0

实例化过程需要首先创建Point3D类实例,再创建Box3D类实例,实例化过程类似于:

(2) 调用Box3D类方法

请完成以下操作:

[i] 调用box1的volume方法;

[ii] 调用box2的surfaceArea方法;

[iii] 调用box1.overlaps(box2)方法,并查看运行结果(注释:本步骤为本实验可选实现内容);

[iiii] 改变box1的中心位置,新位置为(2.75, 0, 0)(注释:本步骤为本实验可选实现内容);

[v] 调用box1.overlaps(box2)方法,并查看运行结果(注释:本步骤为本实验可选实现内容);

[vi] 调用box2.contains(box1)方法,并查看运行结果(注释:本步骤为本实验可选实现内容);

[vii] 改变box1的中心位置,新位置为(0, 0, 0) (注释:本步骤为本实验可选实现内容);

[viii] 调用box2.contains(box1)方法,并查看运行结果(注释:本步骤为本实验可选实现内容)。

2.4.2 Animal实现类的测试

(1) 创建5个类实例

实现如下所示:

表10. 动物实例信息

实例1(Dog)实例2(Dog)实例3(Cat)实例4(Cat)实例5(Rabbit)

nameidnameidnameidnameidnameid

rover0hunter1shorthair2garfield3rabbit4

使用AnimalFactory类来创建实例,具体要求如下:

(2) 调用Animal接口实现类的方法

按下列要求完成测试代码:


版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp