2010-08-09 108 views

回答

1

一般來說,多繼承會產生比解決問題更多的問題。想想如何解決虛擬方法調用。如果一個班級沒有定義一個方法,但是它的父母都這麼做,會怎麼樣?哪一個應該執行?但是,實現多個接口不存在這樣的問題。如果兩個接口定義了相同的方法並且實際嘗試實現它們,那麼代碼甚至不會編譯(雖然我不確定是否可以明確地實現它們並滿足編譯器的要求)。

+0

你可以明確地定義他們倆 – 2010-08-09 06:02:44

+0

在實現兩個接口定義的方法時,不應該有任何編譯器錯誤。 – Dienekes 2010-12-26 11:52:43

0

具體類的多重繼承存在的危險是存儲和虛擬方法查找必須在給定類的兩個或多個父母之間進行協調。特別棘手的是當有共同的祖先。但接口只定義了類應該是什麼樣子,而不是如何實現它,讓類看起來像很多不同的東西,比讓它變得很多不同的東西容易得多。兩個接口可能需要一個int Foo()方法,而一個實現類可以安全地使用這兩個接口並實現Foo(),而不會引起基準Foo()覆蓋的問題等。

另一個原因是構造器鏈很難用多重繼承進行管理。但接口不指定構造函數,所以這個問題完全被迴避了。

爲什麼多繼承是壞的肯定有很多其他的原因。

4

您可以使用接口模擬多重繼承。如果允許多個類繼承,則會導致Diamond problem
至於原因,不支持多重繼承,我建議你閱讀Why doesn't C# support multiple inheritance?

不同的語言,事實上我對如何MI 作品 不同的期望。例如,如何解決衝突 以及重複的基地 是合併還是冗餘。之前,我們可以 在CLR實現MI,我們要做的 所有語言,人物 與衆不同的概念進行了調查,並決定 如何表達他們的 語言中立的方式。我們還要 必須決定MI是否屬於 CLS以及這對於 語言如何不想要這個概念 (大概是VB.NET)。 當然,這是我們在 作爲一個公共語言運行時的業務,但我們 還沒有得到這樣做MI 呢。

MI確實是 適當的地方的數量實際上非常小。 在許多情況下,多個接口 繼承可以代替完成作業 。在其他情況下,您可能是 能夠使用封裝和 代表團。如果我們要添加一個 稍微不同的構造,比如 mixins,那實際上會更強大嗎? 強大嗎?

多個實現繼承 爲 實現注入了很多複雜性。這種複雜性 影響鑄造,佈局,調度, 字段訪問,序列化,標識 比較,可驗證性, 反射,泛型,並可能 許多其他地方。

1

因爲接口不與 實現細節,他們只知道 一個對象可以做什麼操作。 當 存在兩種不同時,多重繼承是困難的 在 基類中具有相同簽名的 方法的實現。但在接口 的情況下,兩個接口可以定義公共 方法用相同的簽名,但他們 沒有在接口 水平,它們僅由 實現的對象或類型實現實現既 的接口。這裏雖然有 兩個不同的接口定義了兩個具有相同簽名的 方法,但 對象提供的通用 實現滿足兩個接口中的 方法。所以 有 實現之間沒有歧義,這兩種方法都有 共同實施,因此,你可以 有多重繼承在 接口的情況下。

0
java supports syntactical multiple inheritance....java does not supports implementation of multiple inheritance... 

some people says java supports multiple inheritance through interfaces ...but its not correct here the explanation: 

inheritance :: 

getting the properties from one class object to another class object.. 

Class A{} 

Class B extends A {} 

here object of class A getting the properties(methods/functions/ & data members/class variables) 

why java does not supports multiple inheritance using classes: 

Class A{} Class B{} Class C extends A,B{} X--this statement causes error because Class A getting object of object class from both sides A and B... 

every java class by default extending Object of object class...and Object of object class is the root object means super class for all classes... 

but here Class c having two super classes of object...so giving error...means java does not support multiple inheritance by using classes.. 

is java supports multiple inheritance using Interfaces:: 

because of this interface concept only few of us saying that java supports multiple inheritance....but its wrong.. 

here the explanation:: 

interface A{} 

interface B{} 

interface C implements A , B{} 

(or) interface A{} 

interface B{} 

Class C implements A , B{} 

here its look like multiple inheritance but ..... 

inheritance means getting the properties from one class object to another class object.. 

here in interface concept we are not at all getting any properties rather we are implementing the unimplemented methods of interface in class... 

so inheritance and intefaces are quite opposite... 

so finally java supports only syntax of multiple inheritance does not supports implementation of multiple inheritance.... 

inheritance is like debit and interface is like credit....but interface has its own importance in other concepts like server side programming... 
2

是繼承意味着越來越從一個類對象的屬性到另一個類的對象..

在這裏界面概念,我們不會在所有得到任何特性,而我們正在實施的接口的未實現的方法在課堂上...

所以繼承和intefaces是完全相反......

所以最後的Java支持多重繼承的只是語法不支持我多重繼承的mplementation ....

繼承就像借記卡和界面中,就像信貸....但界面有像服務器端編程等概念自身的重要性......