2013-07-06 66 views
2

在java中,Object類是所有類的超類。假設,如果我從A繼承B類,即A→B,那麼它是不是像多重繼承?每個類都繼承Object類

Object->A \ 
      B 
    Object/

Java中不支持多繼承,對吧? 那麼這怎麼可能?那會不會產生鑽石依賴問題?

道歉,如果問題太幼稚了。

回答

7

在[J] ava,Object class是所有類的超類。

您對此聲明的理解不正確。 Object是任何類的層次結構的根,但它是而不是直接 所有類的超類。實際上,Object只是直接從超類中直接派生出來的類,這些類明確從Object派生,或者沒有明確地列出另一個超類。否則,它位於層次鏈上端。所以,每個班級(除了Object)都有一個且只有一個直接超級班,並且該超級班要麼是Object要麼是其他班級,但是如果您按照班級的繼承鏈工作,最終你會達到Object(這就是我們的意思是Object是每個班的超班)。

因此,假設,如果我繼承B類從A,即A - >B,則它不喜歡多重繼承?

然後,在這種情況下,層次是BObjectA導出導出。層次結構是而不是A派生自ObjectB派生自AObject。但是,ObjectB的層次結構的根,因爲它是任何類的層次結構的根。

Java中不支持多繼承,對吧?

正確。

那麼這怎麼可能?

你的問題是基於錯誤的理解。再次,Object不是直接超級類的每個類。多繼承意味着不止一個直接超類,並且這在Java中是嚴格禁止的,但是對於每個類而言,Object是超類(但不一定是直接超類)。

:有些人還使用術語「直接」作爲任何類的直接超類。 Java文檔使用「直接」,所以我們將在這裏使用該術語。

0

這個圖像是錯誤的。 B類繼承自繼承自Object的A.不涉及多重繼承。

1

NOP,是傳遞屬性

B extends A extends Object 只有單繼承涉及。

它可能會混淆你引起

(B是A)(A是一個對象),那麼(B是一個對象)。

因此,B是一個對象,而是一個對象,因爲A是一個對象。假設A不是對象,那麼B不會成爲對象。

0

Object不是所有其他類的直接超類;這是他們的最終祖先類。這是你正在尋找的圖片。

       Object 
          / 
          A  
         /
         B 

正如你所看到的,這是一棵樹,沒有鑽石問題可以發生在一棵樹上。