Java是否支持多重inheritance?

从Java的事实来看,Java中的所有类都有一个父类作为Object 。 但是同样的Java说它不支持多重inheritance。 但这段代码意味着什么?

 public class A extends B { //Blah blah blah } 

从上面的代码可以看出,A类扩展了B类。 现在,A类还inheritance了Object类的属性,它是B的超类。 这是不是意味着A类inheritance了B类和Object Class,这就是我们所谓的多重inheritance权?

那么现在Java支持多重inheritance ,如果没有,那么上面代码的答案是什么(显示了多重inheritance)

不,这是单inheritance。 inheritance自B,Binheritance自Object。

多重inheritance将是ABC扩展,其中BC不会相互inheritance,这可能导致钻石问题 :

如果B定义了方法foo()C也定义了方法foo() ,我这样做:

 new A().foo(); 

将使用哪个foo()实现?

这是许多语言中的一个大问题,因此Java设计者决定不允许多重inheritance。

多重inheritance具有多于1个直接基类。 您给出的示例是单inheritance。

例如,如果您有3个类ABC ……

 public class A extends B 

 public class B extends C 

仍然只是单一的inheritance。
多重inheritance

 public class A extends B, C 

Java不支持开发人员的多重inheritance。 在幕后,编译器确保一切都扩展了Object。

基本上,编译器会修改

public Class A扩展了Object,B实际上是Class A扩展B而B类扩展了Object。

多重inheritance意味着一个类扩展了另外两个类。 在例如C ++中允许多重inheritance。 但这与以下情况不同:

 class Object { ... } class B extends Object { //default, not need to be there ... } class A extends B { ... } 

从Java的事实来看,Java中的所有类都有一个父类作为Object

其实不,那不是真的。 Object只是默认的父类。 如果您明确指定了父级,如示例中所示( A extends B ),那么您定义的类不再将Object作为直接父级。

但是, Object是默认值这意味着在没有超类的情况下创建一个类(除了Object本身)是不可能的。 由于每个类都必须有一个超类,因此每个类都必须在某个级别将Object作为祖先