2010-06-09 53 views

回答

11

具體類的多繼承引發a variety of issues

例如,如果一個類繼承了兩個不同基類的同一方法的兩個不同實現呢?

爲了避免這些問題,Java不支持此功能。
與具體類不同,接口不能有方法體。

因此,這些問題都不適用於接口。

+0

這是爲什麼downvoted? – SLaks 2010-06-09 18:28:17

+1

想補充一點,可以解決這些問題(就像其他許多語言一樣),只是沒有太多的意義。 – 2010-06-09 18:32:35

0

我真的不喜歡這裏的「繼承」這個詞,它會導致很多混亂。

Java只允許接口擴展其他接口,併爲類實現接口。

如果將接口視爲一組數學聲明,則每個「擴展」僅提供超級接口和當前接口的集合的聯合。因此你可以做多個「工會」。

當您最終到達實現一個或多個接口的類時,這裏的語義僅僅是該類必須爲該集合中的所有方法提供實現。實現多個接口的類可以重寫爲實現單個接口的類,該接口擴展了上述所有接口。

在類繼承多個類的情況下,它是不允許的,因爲它會導致各種問題,包括鑽石問題。例如,如果我有兩個具有相同方法簽名的不同實現的超類型,應該在子類型中使用哪一個?

0

使語言更簡單,更優雅。 C++允許很多東西,但是學習和使用通常很痛苦。我們(我,至少:))不希望Java是那樣的。

1

因爲實現一個接口不是繼承。它只是意味着您的課程將遵守預定義的合同,通常提供一組與特定功能相關的方法。任何類都可以堅持許多這樣的契約而不會發生衝突(除非這些接口中的兩個定義了相同的方法)。

與繼承不同,由於不存在這種關係,它不會自動接收屬性或功能,因爲它與超類存在層次關係。

由於已經提到的Diamond繼承問題,Java或許多其他OO語言基本上不允許多繼承。

相關問題