是否可以通过虚拟支持多重继承?

时间:2013-11-15 07:23:50

标签: java c++ inheritance

我知道Java没有任何支持多重继承的能力。例如,类C继承了A类和B类的所有属性,然后编译器会混淆应调用哪个方法,该方法在A和B中定义。因此,C ++支持多个继承,Java不支持。

我知道通过使用Interface可以在Java中实现这种多重继承。

我怀疑的是,钻石问题以及如何用Java解决这个问题?

例如,考虑多个类,如A,B,C,D。类B和类C继承类A的属性,类D继承类B和类C的属性。这称为“钻石问题“。

我们如何在Java中解决这个Diamond问题?这个Diamond问题何时可能恰好出现在编码中?

我还提到在C ++中使用Virtual可以实现这种多重继承的概念。而且,Java是为简单而构建和设计的!

在C ++中Virtual的实际含义是什么?如何在Java中使用?是否可以通过虚拟实现多重继承?

我是Java初学者,非常抱歉这个问题。但是,我相信可以从我的错误中吸取教训!

2 个答案:

答案 0 :(得分:1)

Java中没有多重继承的概念。可以实现多个接口,但这是多重继承。

因为没有多重继承,所以的语言中出现的“菱形问题”在Java中不会出现。所以Java中没有virtual关键字 - 不需要它。

Java的设计者认为,多重继承实际上有用的案例数量非常少,以至于不值得在语言中包含。在Java编程的大约15年中,我只有一次遇到了一个业务问题,其中C ++风格的多重继承会很有用。所以我很高兴地说他们是对的。

答案 1 :(得分:0)

如果您想要多个“继承”,则需要实现多个interfaces。每个接口声明实现类需要为其提供定义的抽象方法。

public class MyClass implements interface1, interface2, interface3{
  // provide a definition to the abstract methods of interface
}  

C ++中的'钻石'问题是当一个类继承自两个类时,这两个类都有来自普通祖父的方法。在Java中,没有钻石问题,因为你可以从不扩展两个类;只有一个类和许多接口。

你结合了太多问题。我建议您将帖子分成不同的问题。