我在java继承中有困惑.因为我研究过Java不支持多重继承.因此它根本没有钻石遗传问题.
但是,每个Java类都默认继承Object类,如果我们扩展一个类,那么有两个继承的类首先是Object,第二个是我们继承的类.据我所知,如果任何类继承了两个或更多个类,则称为多重继承.它表明java支持多重继承,因为它同时继承了两个类.
那么为什么它说java不支持多继承并且有没有可能在java中出现钻石问题?
由于所有类都在扩展Object,因此根据定义,您扩展的基类已经扩展Object.您的类不需要添加Object自己,因为它已经存在于层次结构中.
这意味着,在您的层次结构中Object仍然只存在一次作为根,所以没有"钻石".
看到这个
OBJECT CLASS
|
|
CLASS A{} //Class A extends class Object
|
|
CLASS B{} //Class B extends class A
|
|
CLASS C{}//Class C extends class B
Run Code Online (Sandbox Code Playgroud)
由于每个Class都是从Object类继承的,所以当你从其他类继承时,它就不是这样的.因此,对象类将成为所有其他继承类的超类或根类.
所以有什么问题?
你有误解的概念Class extending Object中的情况Inheritance.
只有继承层次结构中的顶级类,从Object类扩展,并在层次结构中较低的类的其余部分扩展直接超类.因此,他们Object通过这种层次结构拥有所有类的方法inheritance,并且没有multiple inheritance涉及.
public class A { // Extends from `Object` class
}
class B extends A { // Extends from `A`
}
class C extends B { // Extends from `B`
}
Run Code Online (Sandbox Code Playgroud)
因此,diamond层次结构中没有问题.
但是,每个Java类默认继承Object类,如果我们扩展一个类,那么有两个继承类首先是Object,第二个是我们继承的类
这部分是正确的.
如果你明确地扩展一个类,那么它将不会扩展Object类.
如果你有课
class A
{
}
Run Code Online (Sandbox Code Playgroud)
然后,编译器会将其更改为
class A extends Object
{
}
Run Code Online (Sandbox Code Playgroud)
但是,如果你明确地扩展了一个类,如下所示,
class A extends AnotherClass
{
}
Run Code Online (Sandbox Code Playgroud)
编译器现在不会添加任何内容,因此没有多重继承.
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |