从Java的事实来看,Java中的所有类都有一个父类Object
。但是同样的Java说它不支持多重继承。但这段代码意味着什么?
public class A extends B
{
//Blah blah blah
}
从上面的代码来看,它意味着类A
扩展了类B
。现在,类A
也继承了Object
类的属性,它是B
的超类。这是否意味着类A
继承了类B
和Object
类,这就是我们所谓的多重继承权?
所以现在Java支持多重继承,如果没有,那么上面代码的答案是什么(显示了多重继承)
答案 0 :(得分:9)
不,这是单继承。继承自B,B继承自Object。
多个继承将A
从B
和C
延伸,其中B
和C
不会相互继承,这可能会导致Diamond Problem:
如果B
定义了方法foo()
,C
也定义了方法foo()
,我这样做了:
new A().foo();
将使用哪个foo()
实施?
这是许多语言中的一个大问题,因此Java设计者决定不允许多重继承。
答案 1 :(得分:2)
多重继承具有多个直接基类。您给出的示例是单继承。
例如,如果您有3个班级A
,B
和C
......
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
作为祖先。