我当时正在研究多重继承的概念(我在愤怒中编写 C++ 代码已经快 10 年了,只是对这个概念有学术上的兴趣)。我找到了这个 reference在维基百科上。
他们列出的对 MI 的一个批评是“无法从单个类显式继承多次”。我对这种说法感到困惑,并且不能 100% 确定这是指什么。
当然,类继承描述了一个类的结构,从同一个类继承多次只会重复同一个类契约,所以我看不出它有什么好处来证明批评是正当的。显式继承会假定类函数和属性的多个实例吗?
我想了解这种批评指的是什么,以及为什么它对启用多重继承的语言隐式不可用。
最佳答案
这叫做 Diamond Problem .大多数允许 MI 的现代语言都有解决方案。
简而言之,你有这个类树:
class A { public int f = 0; };
class B extends A { f = 1; };
class C extends A { f = 2; };
class D extends B, C {};
D.f 会打印什么?如果你给 D.f 赋值,它应该存储在哪里? B(A).f 和 C(A).f 这两个字段应该合并为一个还是应该分开?如果在 B 和 C 中覆盖 A 的方法 x,D.x() 应该做什么?两个都叫?按什么顺序?返回值呢?
关于oop - 多重继承批评,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/531946/