2011-09-26 65 views
2

Java不支持多继承,但Object类默认是所有类的超类。 e.gJava对多继承的怀疑

class Object 
{ 

} 
class B 
{ 

} 
class A extends B 
{ 
} 

类A可以访问B的所有方法和Object.Is不是多重继承的一个例子? 因此,Java不支持多继承是正确的。


我的问题是不发现多级和多重继承之间的区别。 Java文档,它自己说:类对象是类层次结构的根。每个班级都有Object作为超级班。所有对象,包括数组,都实现了这个类的方法。 所以它意味着Class对象是Class A {上例}的超类。 但是B类也是超A类的。 那么它是什么意思呢?

+2

+1似乎是一个足够公平的问题,关于多重继承的含义 – krock

回答

4

不,它不是。多重继承是当一个类有多个直接基类,如:

class A {} 

class B {} 

// not valid Java 
class C extends A, B {} 

一个类可以有很多间接的基类,每个只有一个直接基类,如:

class D extends A {} 

class E extends D {} 

class F extends E {} 

这里的继承层次是F - > E - > D - > A - > Object,但这仍然是单继承。

1

由于没有Java类可以直接扩展两个或更多类,所以可以放心地说Java不支持多继承。

如果您可以说A级扩展B,C,您将拥有多重继承,但您永远无法这样做。

7

传递继承之间的差(C直接从B和传递地继承A):

transitive

多个继承(C来自AB继承):

transitive

+0

对于图的+1 – Thomas

+0

纠正我如果我错了。在这个问题中,类B具有java.lang.Object作为其超类,而类A具有类B作为其超类。类B和类java.lang.Object之间的继承关系在类A中被屏蔽。 – 2011-11-28 11:25:17

+0

不是,没有被屏蔽,所有东西都只是被添加上了,具有相同签名的_except_方法是_overridden_​​。即使是用相同名称声明的变量也被添加,它们只是被称为“_hidden_​​”,但仍然可以使用cast来访问,或者如果它是直接父级,则可以使用“super”关键字。你不会想这样做,只是给你的变量不同的名称,他们都没有任何隐藏添加。 – Navigateur