oop - 多重继承批评

标签 oop multiple-inheritance

我当时正在研究多重继承的概念(我在愤怒中编写 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/

相关文章:

c++ - 多重虚拟继承中的虚拟表和内存布局

java - 如何在java中调用2个不同类的2个不同方法到我自己的类?

python-2.7 - 将子类信号连接到父类(super class)插槽

javascript - iframe 以外的 javascript 变量名冲突的解决方案?

c# - 你什么时候定义一个类?

c# - 在 C# 中创建接口(interface)实例

c++ - "Use of operator + is ambiguous",尽管类型转换被声明为显式

Java继承层次动物类

c++ - 为什么这段代码是 "not ambigious!"——虚函数

php - PHP 中静态函数和类外函数有什么区别?