什么时候用组合,什么时候用继承
When to use composition and when to use inheritance
有没有一种方法可以告诉您在代码中何时使用组合以及何时使用继承。
示例:假设我们有 4 个 类,分别称为 Computer
、MotherBoard
、Monitor
、Keyboard
。我可以让 computer
继承其他三个 类 并且我还可以在 computer
的字段中声明 MotherBoard
、Monitor
、Keyboard
,因此对于第二种情况使用合成。哪种方式更好?大多数开发人员更喜欢哪种方式?
我更喜欢 following 情况下的继承:
- 两者类在同一个逻辑域
- 子类是超类的真子类型
- 超类的实现对于子类是必要的或适当的
- 子类所做的增强主要是附加的。
否则,构图合适。
请注意,在这种情况下,计算机 由您列出的组件 组成。作为捷径,我有时会问自己以下问题:
Computer
有一个Mouse
吗?如果是这样,则使用组合。请注意计算机可以没有鼠标。
- 是
MacBook
一个Computer
吗?如果是这样,则使用继承。
... but in general which way is preferred
一般情况下要根据情况决定:)
有没有一种方法可以告诉您在代码中何时使用组合以及何时使用继承。
示例:假设我们有 4 个 类,分别称为 Computer
、MotherBoard
、Monitor
、Keyboard
。我可以让 computer
继承其他三个 类 并且我还可以在 computer
的字段中声明 MotherBoard
、Monitor
、Keyboard
,因此对于第二种情况使用合成。哪种方式更好?大多数开发人员更喜欢哪种方式?
我更喜欢 following 情况下的继承:
- 两者类在同一个逻辑域
- 子类是超类的真子类型
- 超类的实现对于子类是必要的或适当的
- 子类所做的增强主要是附加的。
否则,构图合适。
请注意,在这种情况下,计算机 由您列出的组件 组成。作为捷径,我有时会问自己以下问题:
Computer
有一个Mouse
吗?如果是这样,则使用组合。请注意计算机可以没有鼠标。- 是
MacBook
一个Computer
吗?如果是这样,则使用继承。
... but in general which way is preferred
一般情况下要根据情况决定:)