什么时候用组合,什么时候用继承

When to use composition and when to use inheritance

有没有一种方法可以告诉您在代码中何时使用组合以及何时使用继承。

示例:假设我们有 4 个 类,分别称为 ComputerMotherBoardMonitorKeyboard。我可以让 computer 继承其他三个 类 并且我还可以在 computer 的字段中声明 MotherBoardMonitorKeyboard,因此对于第二种情况使用合成。哪种方式更好?大多数开发人员更喜欢哪种方式?

我更喜欢 following 情况下的继承:

  • 两者类在同一个逻辑域
  • 子类是超类的真子类型
  • 超类的实现对于子类是必要的或适当的
  • 子类所做的增强主要是附加的。

否则,构图合适。

请注意,在这种情况下,计算机 由您列出的组件 组成。作为捷径,我有时会问自己以下问题:

  • Computer一个Mouse吗?如果是这样,则使用组合。请注意计算机可以没有鼠标。
  • MacBook一个Computer吗?如果是这样,则使用继承。

... but in general which way is preferred

一般情况下要根据情况决定:)