【问题标题】:I need to understand composition and inheritance better我需要更好地理解组合和继承
【发布时间】:2012-06-17 00:01:42
【问题描述】:

我有一个棒球选手超级班

我有一个从球员那里继承的左外野、中外野、右外野、3b、ss、2b、1b、接球手、投手。

所以,让我们以投手为例。投手班也会是继承自棒球运动员的超班吗?与 starter、relier、setup、closer 是继承自投手和棒球运动员类的类?

我的投手库会是一个接口吗?比如快球、曲线球、滑块、换球?

假设我们有一个新的名为 nolan 的投手实例,那么 nolan 的快球是否会是一个“组合”,因为 nolan 的快球依赖于 nolan,或者换句话说,或者没有他就不存在?

我被困在构图上..有人可以根据棒球的类比来解释一下吗..

【问题讨论】:

标签: oop inheritance polymorphism composition


【解决方案1】:

简单来说,继承是is-a关系,而组合是has-a关系。

投手棒球运动员,因此投手会继承自棒球运动员。此外,投手拥有一个投手库,因此可以将其定义为组合,但如果投手使用不同的投手,聚合可能更合适,因为聚合包括列表。

【讨论】:

  • 我的后续行动是,诺兰是否必须拥有武器库的所有权?例如,诺兰的 97mph 快球而不是普通的 91mph 快球?我的意思是这种存在方式,就像他在投球一样……这有意义吗?
  • 诺兰将拥有与所有投手无关的特定信息,因此他很可能通过组合或聚合获得快球。
  • 谢谢,感谢您的帮助。那么,如果某个东西在它的创造者死后还能存在,那将是一种聚合形式?如果它与创造者一起死去,那会是作曲吗?请原谅我,我想我已经接近理解了。由于诺兰投出了一个快球(即使它是他的快球),这个快球仍然可以在没有 nolan 或 aka 聚合的情况下存在。那是对的吗?还是因为是他的快球在他投掷后就停止存在,这是一个组合?
  • 如果快球是一个类,那么诺兰将拥有该类的一个实例,当他这样做时它会死掉。组合和聚合之间的唯一区别是组合意味着每个父项一个项目,但聚合是每个父项多个项目。
  • @KendallFrey 组合与聚合的示例。投手戴着(组合)棒球手套,但他也有可能投球的集合(聚合)。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多