Java中的多重继承相关混淆

Mou*_*her 2 java

我在java继承中有困惑.因为我研究过Java不支持多重继承.因此它根本没有钻石遗传问题.

但是,每个Java类都默认继承Object类,如果我们扩展一个类,那么有两个继承的类首先是Object,第二个是我们继承的类.据我所知,如果任何类继承了两个或更多个类,则称为多重继承.它表明java支持多重继承,因为它同时继承了两个类.

那么为什么它说java不支持多继承并且有没有可能在java中出现钻石问题?

Joa*_*son 6

由于所有类都在扩展Object,因此根据定义,您扩展的基类已经扩展Object.您的类不需要添加Object自己,因为它已经存在于层次结构中.

这意味着,在您的层次结构中Object仍然只存在一次作为根,所以没有"钻石".


Mur*_*ali 6

看到这个

                     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类继承的,所以当你从其他类继承时,它就不是这样的.因此,对象类将成为所有其他继承类的超类或根类.

所以有什么问题?


Roh*_*ain 5

你有误解的概念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层次结构中没有问题.


Azo*_*ous 5

但是,每个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)

编译器现在不会添加任何内容,因此没有多重继承.