2

在java中,Object类是所有类的超类。那么假设,如果我从A继承类B,即A -> B,那么它不是多重继承吗?

Object->A \
            B
   Object /

Java 不支持多重继承,对吧?那么这怎么可能呢?这不会产生钻石依赖性问题吗?

如果问题太天真,请道歉。

4

4 回答 4

7

在 [J]ava 中,Object类是所有类的超类。

您对这句话的理解是不正确的。Object是任何类的层次结构的根,但它不是所有类的直接1超类。实际上,Object它只是显式派生自Object另一个超类或未显式列出另一个超类的类的直接超类。否则,它位于层次结构链的更高位置。因此,每个类(除了Object)都有一个且只有一个直接超类,并且该超类是Object其他类或其他类,但是如果您沿着类的继承链向上工作,最终会遇到问题Object(这就是我们所说的Object是每个班级的超级班级)。

所以假设,如果我BA,即A->继承类B,那么它不像多重继承吗?

然后在这种情况下,层次结构是B派生自A派生自Object。层次结构不是 A源自 ,而是源自ObjectB源自。但是,是 的层次结构的根,因为它是任何类的层次结构的根。AObjectObjectB

Java 不支持多重继承,对吧?

正确的。

那么这怎么可能呢?

你的问题是基于错误的理解。同样,Object不是每个类的直接超类。多重继承意味着多个直接超类,这在 Java 中是严格禁止的,但与每个类都是超类(但不一定是直接超类)一致。Object

1:有些人还使用“立即”一词来表示任何类的直接超类。Java 文档使用“直接”,因此我们将在此处使用该术语。

于 2013-07-06T16:55:59.810 回答
1

不,是传递性

B extends A extends Object 只涉及单继承。

它可能会使您感到困惑,因为

(B 是 A)(A 是对象)然后(B 是对象)。

所以确实 B 是一个 Object ,但它是一个对象,因为 A 是一个对象。假设 A 不是对象,那么 B 不会是对象。

于 2013-07-06T16:53:51.530 回答
0

Object不是所有其他类的直接超类;这是他们的终极祖先阶级。这是您正在寻找的图片。

                             Object
                            /     
                           A      
                          /
                         B

如您所见,它是一棵树,不会出现钻石问题。

于 2013-07-06T16:56:35.990 回答
0

图像是错误的。B类继承自A,A继承自Object。不涉及多重继承。

于 2013-07-06T16:53:46.760 回答