在我的java项目中,我应该具有动物的层次结构,但是我对应该扩展什么感到困惑。 以下是说明:
编写类或接口以表示以下内容:
- 可采用
- 动物
- 蝙蝠
- 鸟
- BlueWhale
- 狗
- E
- 鱼
- 金鱼
- 哺乳动物
- 水獭
- 长尾小鹦鹉
- 爬行动物
- 乌龟
- WaterDweller
- 鲸鱼
- 双翼
您需要确定类/接口的结构。考虑:
哪个应该是抽象类?具体的课程?应该是 接口?类应该如何通过继承关联? 方法应放在哪些类中?应该采用什么方法 覆盖?哪些信息应作为参数使用? 哪些信息可以硬编码为类?一些额外的 详细信息/要求:
所有动物都具有返回布尔值的方法“ isWarmBlooded”。的 方法可以直接在类中或继承。所有动物都有 名称。所有类都有一个toString方法,该方法返回动物的 名称,动物是否为热血动物以及所有动物的清单 适用于动物的名称。 toString方法可以位于 类直接或继承。可以被当作宠物的动物有 一种方法“ getHomeCareInstructions”,该方法返回有关如何 照顾动物生活在水中的动物(是水 居民)具有“ livesOnLand”方法,该方法返回的布尔值 动物是否也可以在陆地上生活。有翅膀的动物有 一种“飞行”方法,该方法返回动物是否可以飞行的布尔值。 分配的这一部分不一定从 编程角度。你应该花些时间仔细 考虑课程的设计以及它们之间的关系 通过继承或接口
我不确定如何设计它,因为我知道有翅膀的鸟,但是蝙蝠也有。因此,蝙蝠会伸出翅膀,但是蝙蝠也是哺乳动物。我不可能有翅膀的哺乳动物,因为鸟类不是哺乳动物。而且,鲸鱼和水獭是垃圾居民,但也是水栖动物。我不能让水栖动物扩展哺乳动物(因为鲸鱼/水獭是哺乳动物),但是鱼不是哺乳动物,而是水栖动物。我如何使蝙蝠既有翅膀又有哺乳动物?编程是容易的部分,只是在与项目的结构作斗争。我该如何构造它才能起作用?
答案 0 :(得分:3)
因此在建模中,您必须考虑:
哪些是实际动物?
例如鲸鱼,水獭->类
是动物的类型?
例如一只鸟。 ->抽象类
因为每个e都是鸟。
这称为Liskov替代原则https://en.wikipedia.org/wiki/Liskov_substitution_principle
动物的特征是什么?
例如WaterDweller,Winged->这些是接口。
每个阶级都可以有一个超阶级,它可以具有许多特性,例如有翼,成为水栖动物或可被采用
您的蝙蝠示例有一个附加内容:
它是哺乳动物->因此,它的超类是哺乳动物。它是带翅膀的-这是一个特性-因此它实现了带翅膀的界面。
class Bat extends Mammal implements Winged{
}