从我所阅读的内容和我所看到的内容来看,我认为多重继承是一种不好的做法,而不仅仅是因为它使初学者能够在任何地方使用更优雅的设计模式可能更有用且更有意义。
有些语言选择不实现多重继承,然后选择实现特征(例如PHP)。我看到的多重继承和特征之间唯一有趣且实质性的差异是语言学上的差异:“继承”表示某种共享性质,“特质”更多地代表特征。
我是否还缺少任何其他重要的区别,这可以解释为什么有人认为多重继承是不合适的,现在,特征是否恰当?
答案 0 :(得分:3)
你可以使用特征伪造多重继承,但我认为基本的区别是概念性的。亲子关系是“is-a”关系。
如果你有一个带有Table子项和PicknickTable子项的Furniture类,你有Picknicktable是一个表是一个家具(嗯,这样的家具是可数的?nvrmnd)。
对于特征,你只需说:我不想继续编写代码来将东西放在表面上,所以我写了“putStuffOnThisThing”特性,他们就拥有它。这不是继承!这种推理背后的基本错误可能是你想要将特征视为一种不同的方式来显示层次结构而你不应该这样做。它不能代替实际的好设计,它是工具箱中的一个技巧,你可能会滥用它来进行多重继承,但你可能更好地使用它来避免多次写一些行。
因此,在比较的辩护中:traits与多重继承有一些相同的问题,比如在具有相同名称的多个事物的情况下需要使用别名来解决的问题。虽然这不完全是钻石问题,但它非常接近。