2011-09-26 69 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