Java是否支持多重继承?

时间:2011-03-14 12:26:44

标签: java oop inheritance

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

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

从上面的代码来看,它意味着类A扩展了类B。现在,类A也继承了Object类的属性,它是B的超类。这是否意味着类A继承了类BObject类,这就是我们所谓的多重继承权?

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

5 个答案:

答案 0 :(得分:9)

不,这是单继承。继承自B,B继承自Object。

多个继承将ABC延伸,其中BC不会相互继承,这可能会导致Diamond Problem

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

new A().foo();

将使用哪个foo()实施?

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

答案 1 :(得分:2)

多重继承具有多个直接基类。您给出的示例是单继承。

例如,如果您有3个班级ABC ......

public class A extends B

public class B extends C

仍然只是单一的继承 多重继承将是

public class A extends B, C

答案 2 :(得分:1)

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

基本上,编译器会修改

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

答案 3 :(得分:1)

多重继承意味着一个类扩展两个其他类。例如,允许多重继承。 C ++。但这不同于:

class Object {
...
}

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

class A extends B {
...
}

答案 4 :(得分:1)

  

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

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

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