3

根据我的阅读和所见,我认为多重继承是一种不好的做法,这不是因为它本身,而是因为它导致初学者在任何地方使用更优雅的设计模式可能有用和更有意义的地方。

一些语言选择不实现多重继承,然后选择实现特征(例如 PHP)。我看到的多重继承和特征之间唯一有趣且实质性的区别是语言差异:虽然“继承”表示某种共享性质,但“特征”更多地代表特征。

有没有我遗漏的其他重要区别可以解释为什么有些人认为多重继承是不合适的,而现在,特征是合适的?

4

1 回答 1

2

您可以使用特征来伪造多重继承,但我相信基本区别是概念上的区别。父子关系是“is-a”关系。

如果你有一个家具类,有一个 Table 孩子和一个 PicknickTable 孩子,你有 Picknicktable is-a Table is-a Furniture(嗯,这样的家具是可数的吗?nvrmnd)。

有了特质,你就说:我讨厌继续写代码把东西放在表面上,所以我写了“putStuffOnThisThing”特质,他们就有了。这不是继承!这种推理背后的基本错误可能是您希望将特征视为显示层次结构的不同方式,而您不应该这样做。它不能替代一个真正好的设计,它是工具箱中的一个技巧,你可能会误用它来进行多重继承,但你可能会更好地使用它来避免多次编写某些行。

因此,为了捍卫比较:特征具有与多重继承相同的一些问题,例如在多个具有相同名称的事物的情况下需要使用别名来解决的问题。虽然这不完全是钻石问题,但它非常接近。

于 2013-12-11T22:12:47.923 回答