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将是A
从B
和C
扩展,其中B
和C
不会相互inheritance,这可能导致钻石问题 :
如果B
定义了方法foo()
, C
也定义了方法foo()
,我这样做:
new A().foo();
将使用哪个foo()
实现?
这是许多语言中的一个大问题,因此Java设计者决定不允许多重inheritance。
多重inheritance具有多于1个直接基类。 您给出的示例是单inheritance。
例如,如果您有3个类A
, B
和C
……
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
作为祖先 。