抽象類 接口 複習

通過網上收集和自己總結的:
[list]
[*]java中只可以繼承一個類卻可以繼承多個接口。一個抽象類的實現只能由這個抽象類的子類給出,也就是說,這個實現處在抽象類所定義出的繼承的等級結構中,而由於Java語言的單繼承性, 所以抽象類作爲類型定義工具的效能大打折扣(只能是定義爲一種類型,可以結合接口使用)。在這一點上,Java接口的優勢就出來了,任何一個實現了一個Java接口所規定的方法的類都可以具有這個接 口的類型,而一個類可以實現任意多個Java接口,從而這個類就有了多種類型。
[/list]
[list]
[*]抽象類可以提供一些方法的實現。Java接口和Java抽象類最大的一個區別,就在於Java抽象類可以提供一些方法的實現,而Java接口不可以,這大概就是 Java抽象類唯一的優點吧,但這個優點非常有用。如果向一個抽象類里加入一個新的具體方法時,那麼它所有的子類都一下子都得到了這個新方法,而Java 接口做不到這一點,如果向一個Java接口裏加入一個新方法,所有實現這個接口的類就無法成功通過編譯了,因爲你必須讓每一個類都再實現這個方法才行,這 顯然是Java接口的缺點。
[/list]
[list]
[*]abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,體現的是繼承的關係;interface表示的是"like-a"關係,體現的是一種契約關係,並不要求interface的實現者和interface定義在概念本質上是一致的。
[/list]

綜合以上幾點:
抽象類:只可以繼承一個抽象類,卻可以提供一些方法的實現,體現的是繼承關係。
接口:可以繼承多個接口,卻不能提供方法的實現,體現的是契約關係。
我們定義抽象類型的時候可以使用抽象類,定義一些次要行爲時就可以使用接口。

[img]http://dl.iteye.com/upload/attachment/232946/d8135c56-149d-39ad-b54a-f611efa8e8ef.png[/img]

AlarmDoor是一種(is-a)Door類型,擁有(like-a)Alarm提供的行爲。
再舉幾個例子:
public class Cellphone extends Phone implements Bluetooth{   
}

public  class  電視機 extends 電器 implements 遙控器{
}


再看一下Collection接口,AbstractCollection定義爲一個抽象類,繼承了Collection接口,把接口中的size()和iterator()抽象化,其他方法實現。因此當一個具體的實現類繼承AbstractCollection抽象類時只需實現size()和iterator()的具體實現就可以了。而不用每個方法都實現一次。
發佈了20 篇原創文章 · 獲贊 1 · 訪問量 1901
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章