一.接口含義:設計模式
1.Java接口,Java語言中存在的結構,有特定的語法和結構;2.一個類所具備的方法的特徵集合,是一種邏輯上的抽象。工具
前者叫作「Java接口」,後者叫作「接口」。設計
Java接口自己沒有任何實現,由於Java接口不涉及表象,而只描述public行爲,因此Java接口比Java抽象類更抽象化。orm
Java接口的方法只能是抽象的和公開的,Java接口不能有構造器,Java接口能夠有public,靜態的和final屬性。對象
二.爲什麼用接口Java是一種單繼承的語言,若要給已有父類的具體類增長新功能,在OCP原則下,解決是給它的父類加父類,或者給它父類的父類加父類,直到移動到類等級結構的最頂端。這樣一來,對一個具體類的可插入性的設計,就變成了對整個等級結構中全部類的修改。繼承
當有了接口,以上例子中,就不須要維護整個等級結構中的全部類了.接口
三.接口具胡可插入性:生命週期
在一個等級結構中的任何一個類均可以實現一個接口,這個接口會影響到此類的全部子類,但不會影響到此類的任何超類。此類將不得不實現這個接口所規定的方法,而其子類能夠今後類自動繼承這些方法,固然也能夠選擇置換掉全部的這些方法,或者其中的某一些方法,這時候,這些子類具備了可插入性(而且能夠用這個接口類型裝載,傳遞實現了他的全部子類)。io
接口提供了關聯以及方法調用上的可插入性,軟件系統的規模越大,生命週期越長,接口使得軟件系統的靈活性和可擴展性,可插入性方面獲得保證。編譯
正是有了接口,使得Java單繼承性有了新的擴展的可能(變向地實現多繼承);三.類型等級結構Java接口(以及抽象類)通常用來做爲一個類型的等級結構的起點。
若是一個類已經有了一個主要的超類型,那麼經過實現一個接口,這個類能夠擁有另外一個次要的超類型,這種次要的超類型叫作混合類型。
四.Java接口分類一、普通接口(含有方法定義)public interface ActionListener{public abstract void actionPerformed(ActionEvent event);}
二、標識接口(無任何方法和屬性定義)標識接口是沒有任何方法和屬性的接口.標識接口不對實現它的類有任何語義上的要求,它僅僅代表實現它的類屬於一個特定的類型。
public interface Serializable{};三、常量接口是指用Java接口來聲明一些常量,而後由實現這個接口的類使用這些常量。
public interface AppConstants{public static final DATA_SOURCE_NAME="test";public static final USER_NAME="test";public static final PASSWORD="test";}
五.接口的特色一、Java接口中的成員變量默認都是public,static,final類型的(均可省略),必須被顯示初始化,即接口中的成員變量爲常量(大寫,單詞之間用"_"分隔)二、Java接口中的方法默認都是public,abstract類型的(均可省略),沒有方法體,不能被實例化三、Java接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法四、接口中沒有構造方法,不能被實例化五、一個接口不能實現(implements)另外一個接口,但它能夠繼承多個其它的接口六、Java接口必須經過類來實現它的抽象方法七、當類實現了某個Java接口時,它必須實現接口中的全部抽象方法,不然這個類必須聲明爲抽象類八、不容許建立接口的實例(實例化),但容許定義接口類型的引用變量,該引用變量引用實現了這個接口的類的實例九、一個類只能繼承一個直接的父類,但能夠實現多個接口,間接的實現了多繼承.
六.Java接口和Java抽象類區別面向對象設計的重點在於抽象。抽象類與接口都位於繼承樹的上層。
相同點:
一、表明系統的抽象層,當一個系統使用一顆繼承樹上的類時,應該儘可能把引用變量聲明爲繼承樹的上層抽象類型,這樣能夠提升兩個系統之間的送耦合二、都不能被實例化三、都包含抽象方法,這些抽象方法用於描述系統能提供哪些服務,但不包含方法體不一樣點:
一、最大的一個區別,就在於Java抽象類能夠提供某些方法的部分實現,而Java接口不能夠;這大概就是Java抽象類惟一的優勢吧,但這個優勢很是有用。
能夠向抽象類里加入一個新的具體方法,全部的子類都自動獲得這個方法;但Java接口裏加入一個 新方法,全部實現這個接口的類就沒法成功經過編譯,必需手動給每一個實現了該接口的類加上該方法的實現;二、抽象類的實現只能由子類給出,也即該實現只能在抽象類定義的繼承的等級結構中;因此抽象類做爲類型定義工具的效能大打折扣。
Java接口,任何一個實現了一個Java接口所規定的方法的類均可以具備這個接口的類型,而一個類能夠實現任意多個Java接口,從而這個類就有了多種類型。
以上看出:Java接口是定義混合類型的理想工具,混合類代表一個類不只僅具備某個主類型的行爲,並且具備其餘的次要行爲。
三、結合一、2點中抽象類和Java接口的各自優點,具精典的設計模式就出來了:
聲明類型的工做仍然由Java接口承擔,可是同時給出一個Java 抽象類,且實現了這個接口,而其餘同屬於這個抽象類型的具體類能夠選擇實現這個Java接口,也能夠選擇繼承這個抽象類,也就是說在層次結構中,Java 接口在最上面,而後緊跟着抽象類,這下兩個的最大優勢都能發揮到極至了。這個模式就是「缺省適配模式」。
在Java語言API中用了這種模式,並且全都遵循必定的命名規範:Abstract +接口名。
七.使用接口和抽象類的整體原則:
一、用接口做爲系統與外界交互的窗口站在外界使用者(另外一個系統)的角度,接口向使用者承諾系統能提供哪些服務,站在系統自己的角度,接口制定系統必須實現哪些服務,接口是系統中最高層次的抽象類型.經過接口交互能夠提升兩個系統之間的送耦合系統A經過系統B進行交互,是指系統A訪問系統B時,把引用變量聲明爲系統B中的接口類型,該引用變量引用系統B中接口的實現類的實例。
public interface B { }
public class C implements B { }
public class A { B a = new C(); }
二、Java接口自己必須很是穩定,Java接口一旦制定,就不容許隨遇更加,不然對外面使用者及系統自己形成影響三、用抽象類來定製系統中的擴展點,抽象類來完成部分實現,還要一些功能經過它的子類來實現