a L*_*ner 53 java inheritance design-patterns
赞成合成而不是继承
是非常流行的短语.我读了几篇文章,最后每篇文章都说
当类之间存在纯粹的IS-A关系时使用继承.
本文的一个例子:
Apple和Fruit之间存在明显的IS-A关系,即Apple IS-A Fruit,但作者还将其显示为Apple HAS-A Fruit(组合),以显示继承实现时的陷阱.
我在这里有些困惑,声明的含义是什么
当类之间存在纯粹的IS-A关系时使用继承.
使用组合而不是继承是否意味着即使存在纯粹的IS-A关系也总是尝试应用组合, 并且只为那些组合没有意义的情况留下继承?
JB *_*zet 74
当您使用继承来重用超类中的代码时,而不是覆盖方法并定义另一种多态行为,这通常表明您应该使用组合而不是继承.
该java.util.Properties
班是一个坏的使用继承的一个很好的例子.它不是使用 Hashtable来存储其属性,而是扩展 Hashtable,以便重用其方法并避免使用委托重新实现其中的一些方法.
我认为这是面向对象设计中讨论最多的一点.正如文章中所建议的,组合总是优于继承.这并不意味着你永远不应该使用继承.你应该在哪里更有意义(哪些可以辩论).
使用组合有许多优点,其中几个是: