2012-11-19 120 views
1

我想知道Object是否也是「鬆散」抽象類的超類,也就是不擴展其他抽象類的抽象類。我不認爲這很有效。但是,當把所有東西放在一起時,這個「正式」措辭如何呢?對象是抽象類的超類嗎?

下列支持和抵觸在主題行中的數Q i看到的方式:支持

(「是」至Q以上):ⅰ)一個具體的類可以從一個抽象繼承II。 )每個班級都是Object的後裔,以及iii。)每個班級(除Object之外)都只有一個超班。如果Object不是抽象類的超類,那麼(iii)對於Object的特殊情況必須違反 - 「如果其中一個類是Object而另一類是抽象類,則類可以有兩個超類。

矛盾(對Q的「否」):抽象類不能具體化,而Object是具體的。但是,這也可以被解釋爲「針對Object課程的特例」。

它比另一面更偏向一邊嗎?或者它僅僅是「兩者兼有 - 對於Object班級來說是例外」。提前致謝。

注意:我讀了關於 Why java.lang.Object is not abstract?的討論。

在上面的原始消息中糾正我明顯的錯誤: 抽象類可以明顯地從具體的類繼承。這也使Object成爲他們的超類。

回答

0

我認爲你感到困惑的是認爲抽象類繼承一個具體類是合法的。這很少見,但可能會發生。 This question顯示了很多這樣的例子。

+0

感謝您的鏈接 - 這使它。我一直都缺少從具體的繼承的抽象類。 – ashley

+0

幾乎所有的例子都有擴展其他具體類的具體類。實際上,我看到的唯一反例是ASP.NET的一個示例類層次結構(它不是Java)。如果你看到一個不同的反例,那麼爲什麼不把它複製到你的答案中,而不是讓讀者梳理該頁面呢? – ruakh

3

是的,Object是每個抽象類的超類型,而—是唯一的—甚至是超類型的接口。

一個抽象類不能被Sub要一個具體的一個,[…]

這是不正確。

0

是的,所有「鬆散」的抽象類繼承Object。抽象類繼承具體類並不常見,但它是合法的。