在java中,Object类是所有类的超类。那么假设,如果我从A继承类B,即A -> B,那么它不是多重继承吗?
Object->A \
B
Object /
Java 不支持多重继承,对吧?那么这怎么可能呢?这不会产生钻石依赖性问题吗?
如果问题太天真,请道歉。
在java中,Object类是所有类的超类。那么假设,如果我从A继承类B,即A -> B,那么它不是多重继承吗?
Object->A \
B
Object /
Java 不支持多重继承,对吧?那么这怎么可能呢?这不会产生钻石依赖性问题吗?
如果问题太天真,请道歉。
在 [J]ava 中,
Object
类是所有类的超类。
您对这句话的理解是不正确的。Object
是任何类的层次结构的根,但它不是所有类的直接1超类。实际上,Object
它只是显式派生自Object
另一个超类或未显式列出另一个超类的类的直接超类。否则,它位于层次结构链的更高位置。因此,每个类(除了Object
)都有一个且只有一个直接超类,并且该超类是Object
其他类或其他类,但是如果您沿着类的继承链向上工作,最终会遇到问题Object
(这就是我们所说的Object
是每个班级的超级班级)。
所以假设,如果我
B
从A
,即A
->继承类B
,那么它不像多重继承吗?
然后在这种情况下,层次结构是B
派生自A
派生自Object
。层次结构不是 A
源自 ,而是源自Object
和B
源自。但是,是 的层次结构的根,因为它是任何类的层次结构的根。A
Object
Object
B
Java 不支持多重继承,对吧?
正确的。
那么这怎么可能呢?
你的问题是基于错误的理解。同样,Object
不是每个类的直接超类。多重继承意味着多个直接超类,这在 Java 中是严格禁止的,但与每个类都是超类(但不一定是直接超类)一致。Object
1:有些人还使用“立即”一词来表示任何类的直接超类。Java 文档使用“直接”,因此我们将在此处使用该术语。
不,是传递性
B extends A extends Object
只涉及单继承。
它可能会使您感到困惑,因为
(B 是 A)(A 是对象)然后(B 是对象)。
所以确实 B 是一个 Object ,但它是一个对象,因为 A 是一个对象。假设 A 不是对象,那么 B 不会是对象。
Object
不是所有其他类的直接超类;这是他们的终极祖先阶级。这是您正在寻找的图片。
Object
/
A
/
B
如您所见,它是一棵树,不会出现钻石问题。
图像是错误的。B类继承自A,A继承自Object。不涉及多重继承。