java - Java OOP - 简单示例中的建模问题(多态)。组合还是继承?
问题描述
我正在尝试用 Java (OOP) 对某些系统进行建模,但我将使用一个更简单的示例来解释我遇到的问题(我相信这与多态性和/或继承有关)。虽然我觉得解决方案可能与组合有关。
简单地说,我们有Animal、Species、Bird和Pigeon。我目前的关系是:
- 鸽子工具/扩展动物,鸟(鸽子是动物和鸟)
- 鸟类工具/扩展物种(鸟是物种)
尽管请记住,这种设计应该可以扩展以包括更多Animals和Species。
我想做以下事情:
- 对于 a
List<Animal>
,我希望能够Pigeon
仅添加(和其他动物)而不是Species
orBird
。这很满意。 - 对于 a
List<Bird>
,我希望能够Pigeon
仅添加(和其他鸟类)。这很满意。 - 但是,对于 a
List<Species>
,我只希望能够添加Bird
(和其他物种);但是,通过这种设计的多态性,我Pigeon
也可以添加不受欢迎的东西(我希望在这个例子中鸽子不是物种)。
我从来没有完全理解这一点,但我相信这会遇到我听过很多关于继承的问题。我希望我已经足够详细地解释了这个例子,但是如果有人对如何建模这个有任何建议(使用抽象类、接口、组合、设计模式等),那将非常感激!
解决方案
推荐阅读
- python - python“all”函数使列表为空
- html - AngularJS - 将 HTML 渲染到工具提示
- input - 运行脚本以通过 SSH 连接到主机,收集用户输入并将信息发送回原始主机。无法获取用户输入
- android - 在 Android 中使用 3 层(对象、数组、字符串)解析 JSON
- python - 如何创建一个选择所有元素的切片对象?
- docker - 如何将 tar 存档推送到私有 docker 注册表?
- django - 为日期输入无效值时,Django falis
- ios - 在 swift 4 中从服务器发送通知时 Firebase 通知不起作用?
- c# - 将 C# 类库引用添加到 VB.Net 项目
- python - Kivy - 将 KV 与 python 逻辑相结合