How*_*ard 14 java oop design-patterns
大多数设计图书说我们应该"赞成对象组合而不是类继承".
但是,任何人都可以给我一个例子,继承比对象组合更好.
mat*_*t b 13
继承适用于is-a关系.这种has-a关系不适合.
由于类/组件之间的大多数关系属于has-a存储桶(例如,一个Car类可能不是一个类HashMap,但它可能有一个HashMap),因此它遵循组合通常更好地建模类之间的关系而不是继承.
这并不是说继承对某些场景没有用或者不是正确的解决方案.
在Java中,每当您从一个类继承时,您的新类也将自动成为原始类类型的子类型。由于它是子类型,因此需要遵守Liskov替换原则。
原则上说,您必须能够在需要超型的任何地方使用子类型。这严重限制了新继承的类的行为与原始类的行为有何不同。
虽然没有编译器能够使您遵守该原则,但是如果您不这样做,则会遇到麻烦,尤其是在其他程序员正在使用您的类时。
在允许子类化而不进行子类型化的语言中(例如CZ语言),规则“从继承性出发考虑对象的组成”并不像Java或C#这样的语言那么重要。