菱形继承
继承是面对对象语言的三大特性之一。在使用面对对象语言的过程中,有时会涉及到多重继承这一功能,而菱形继承(diamond inheritance)是其中绕不过去的“坎”。
菱形继承可以简单地用以下一幅图来表示:
A类和B类都继承自Base类,而C类继承自A类和B类。按照继承的理论,C类中应该有两个Base类的数据。这会引发两个问题:1.二义性;2.空间浪费。
接下来从C++和Java两个编程语言的角度出发分析菱形继承。
C++
Java
C++
#include <iostream>
using namespace std;
class Base
{
public:
int value = 0;
};
class A : public Base
{
};