可能重複:
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed爲什麼Java的允許多重繼承的接口,而不是從抽象/具體類
爲什麼Java允許多重繼承的接口,而不是從抽象或具體類
可能重複:
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed爲什麼Java的允許多重繼承的接口,而不是從抽象/具體類
爲什麼Java允許多重繼承的接口,而不是從抽象或具體類
具體類的多繼承引發a variety of issues。
例如,如果一個類繼承了兩個不同基類的同一方法的兩個不同實現呢?
爲了避免這些問題,Java不支持此功能。
與具體類不同,接口不能有方法體。
因此,這些問題都不適用於接口。
這是爲什麼downvoted? – SLaks 2010-06-09 18:28:17
想補充一點,可以解決這些問題(就像其他許多語言一樣),只是沒有太多的意義。 – 2010-06-09 18:32:35
我真的不喜歡這裏的「繼承」這個詞,它會導致很多混亂。
Java只允許接口擴展其他接口,併爲類實現接口。
如果將接口視爲一組數學聲明,則每個「擴展」僅提供超級接口和當前接口的集合的聯合。因此你可以做多個「工會」。
當您最終到達實現一個或多個接口的類時,這裏的語義僅僅是該類必須爲該集合中的所有方法提供實現。實現多個接口的類可以重寫爲實現單個接口的類,該接口擴展了上述所有接口。
在類繼承多個類的情況下,它是不允許的,因爲它會導致各種問題,包括鑽石問題。例如,如果我有兩個具有相同方法簽名的不同實現的超類型,應該在子類型中使用哪一個?
使語言更簡單,更優雅。 C++允許很多東西,但是學習和使用通常很痛苦。我們(我,至少:))不希望Java是那樣的。
因爲實現一個接口不是繼承。它只是意味着您的課程將遵守預定義的合同,通常提供一組與特定功能相關的方法。任何類都可以堅持許多這樣的契約而不會發生衝突(除非這些接口中的兩個定義了相同的方法)。
與繼承不同,由於不存在這種關係,它不會自動接收屬性或功能,因爲它與超類存在層次關係。
由於已經提到的Diamond繼承問題,Java或許多其他OO語言基本上不允許多繼承。
重複的http://stackoverflow.com/questions/2515477/why-there-is-no-multiple-inheritance-in-java-but-implementing-multiple-interface – 2010-06-09 18:29:35