2012-05-17 37 views
-1

可能重複:
When to use abstract class or interface?當只有抽象類而不是接口

我知道抽象類和接口。但我想知道一個真正的時間場景,我們只需要使用抽象類,而不是接口,只能使用接口,而不能使用抽象類。任何人都可以給我一些例子。

我想第二個用於需要多重繼承時,即一個類已經繼承了一些類,所以我們不能在這裏使用抽象類。我們只需要使用接口。以同樣的方式,我需要一個例子,其中我們只使用抽象的而不是接口。

編輯

只是爲接口添加一些點。

考慮Java庫的集合

      Collections 

      List        Set 

所有3接口,但在重大的事情,雖然擁有的功能它是常見的是加,中的addAll,包含,containsAll等列表實現了自己的一套和以另一種方式實施(講述重複)。設置不允許重複列表允許重複。

所以我想說的是,當曾經有超接口的子接口沒有共同的特徵,我們必須去界面

但如果有一些共同的功能,這兩者已經然後把它作爲抽象類。

我需要一個在java api中完成的實際示例。 謝謝。 Sindhu

+3

從字面上有成千上萬* *回答這個問題流傳在Internet上。 – dlev

+0

Sindhu,這是功課嗎?請分享你最好的答案,並且我們可以告訴你,如果你在正確的軌道上。 – rajah9

+0

嗨rajah9我編輯 –

回答

0

抽象類適用於通用功能,這與定義API的接口無關。

如果除了抽象類的子類以外沒有其他實現,則可以跳過該接口。我不能真正想到一個實際的例子,因爲我總是想要接口,所以我可以爲單元測試創​​建模擬實現。

跳過抽象類更爲常見。在這種情況下,每個項目都會授予接口,但不共享任何實現。你可能有一個「ConnectionService」接口,其實現爲JDBC,FTP等,這些實現對於它們的協議是特定的,以至於抽象類不增加任何值。

0

通常,如果希望類能夠從鏈中的前一個類繼承,那麼通常會使用超級類層次結構。

一個超類可能是動物

動物可以是食草動物,食肉動物或。

草食動物可以是一匹馬。

食肉動物可以是一隻狼。

馬可以是一個牧場。

狼可以是一個幼崽。

等。

當你想強制添加的某些功能,你通常只能實現接口,但根據具體情況逐案不同,因爲接口只實現方法簽名,但沒有實際功能。你必須寫這個。