Java裡面由于不允許多重繼承,是以如果要實作多個類的功能,則可以通過實作多個接口來實作。
Java接口和Java抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現。OOP面向對象的程式設計,如果要提高程式的複用率,增加程式的可維護性,可擴充性,就必須是面向接口的程式設計,面向抽象的程式設計,正确地使用接口、抽象類這些太有用的抽象類型做為java結構層次上的頂層。
Java接口和Java抽象類有太多相似的地方,又有太多特别的地方,究竟在什麼地方,才是它們的最佳位置呢?把它們比較一下,你就可以發現了。
1、Java接口和Java抽象類最大的一個差別,就在于Java抽象類可以提供某些方法的部分實作,而Java接口不可以,這大概就是Java抽象類唯一的優點吧,但這個優點非常有用。如果向一個抽象類裡加入一個新的具體方法時,那麼它所有的子類都一下子都得到了這個新方法,而Java接口做不到這一點,如果向一個Java接口裡加入一個新方法,所有實作這個接口的類就無法成功通過編譯了,因為你必須讓每一個類都再實作這個方法才行,這顯然是Java接口的缺點。
2、一個抽象類的實作隻能由這個抽象類的子類給出,也就是說,這個實作處在抽象類所定義出的繼承的等級結構中,而由于Java語言的單繼承性,是以抽象類作為類型定義工具的效能大打折扣。在這一點上,Java接口的優勢就出來了,任何一個實作了一個Java接口所規定的方法的類都可以具有這個接口的類型,而一個類可以實作任意多個Java接口,進而這個類就有了多種類型。
3、從第2點不難看出,Java接口是定義混合類型的理想工具,混合類表明一個類不僅僅具有某個主類型的行為,而且具有其他的次要行為。