类的继承和接口
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无
方法getCenterpublic无Point3D
方法getWidthpublic无double
方法getHeightpublic无double
方法getDepthpublic无double
表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个属性
方法volumepublic无double
方法surfaceAreapublic无double
方法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
方法getNamepublic无String获得动物名称
方法getIDpublic无int获得动物编号
方法getNumLegspublic无int获得动物的脚个数
方法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
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。