我正在研究多重继承的概念(自从我在愤怒中编写C++以来已经差不多10年了,并且只是在学术上对这个概念感兴趣).我在维基百科上找到了这个参考.
他们列出的对MI的批评是"无法从单个类中明确地继承多次".我对这个陈述感到困惑,并不是百分之百地确定这是指什么.
当然,一个类继承描述了一个类的结构,并且从同一个类继承多次只会重复相同的类契约,所以我看不出它会给批评辩护的好处.显式继承是否会假设类函数和属性的多个实例?
我想了解这个批评所指的是什么,以及为什么启用多重继承的语言隐含无法使用它.
这被称为钻石问题.大多数允许MI的现代语言都有解决方案.
简而言之,你有这个类树:
class A { public int f = 0; }; class B extends A { f = 1; }; class C extends A { f = 2; }; class D extends B, C {};
Df打印什么?如果你把一些值放到Df中,它应该存放在哪里?两个字段B(A).f和C(A).f应该合并为一个还是应该保持分开?如果你在B和C中覆盖A的方法x,Dx()应该做什么?打两个电话?以什么顺序?返回值怎么样?