什么是接口
一個Java接口 是一些方法特征的集合塘匣,這些方法特征當然來自于具體方法硕盹,但是它們一般都是來自于一些在系統(tǒng)中不斷出現(xiàn)的方法内斯。一個接口只有方法的特征栋猖,而沒有方法的實現(xiàn)净薛,因此這些方法在不同的地方被實現(xiàn)時,可以具有完全不同的行為蒲拉。
在Java語言規(guī)范中肃拜,一個方法的特征僅僅包括方法的名字,參量的數(shù)目和種類雌团,而不包括方法的返回類型爆班,參量的名字以及所拋出的異常,在Java編譯器檢查方法的置換時候辱姨,則進一步檢查2個方法(分父類型與子類型)的返回類型和拋出的異常是否相同柿菩。
在使用接口時候,需要指明接口本身雨涛,以及實現(xiàn)這個接口的類枢舶。這種關系叫做接口繼承懦胞;而一個類是另一個類的子類,這種關系叫實現(xiàn)繼承凉泄。接口繼承的規(guī)則與實現(xiàn)繼承的規(guī)則不同躏尉,一個類最多只能夠有一個父類,但是可以同時實現(xiàn)幾個接口
Java接口本身沒有任何實現(xiàn)后众,因為Java接口不涉及表象胀糜,而只描述public行為,所以Java接口比Java抽象類更為抽象化蒂誉。
一個Java接口的方法只能是抽象的和公開的教藻,Java接口不能有構造方法。Java接口可以有public右锨,靜態(tài)的和final的屬性括堤。
實現(xiàn)一個共同的Java接口的兩個類常常完全不同,但是有一組相同的方法和常數(shù)绍移。一些看上去毫不相干的類悄窃,可以提供相類似的服務,從而具有相同的接口蹂窖。
接口和類的最重要的區(qū)別是轧抗,接口僅僅描述方法的特征(Signature),而不給出方法的實現(xiàn)瞬测;而類不僅給出方法的特征鸦致,而且給出方法的實現(xiàn)。因此涣楷,接口把方法的特征和方法的實現(xiàn)分割開來分唾。這種分割,體現(xiàn)在接口常常代表一個角色(role),它包裝與 該角色相關的操作和屬性狮斗,而實現(xiàn)這個接口的類便是扮演這個角色的演員绽乔。一個角色可以由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外碳褒,并不要求有任何其他的共同之處
為什么要使用接口
首先我們要思考如果沒有接口會怎么樣呢折砸?一個類總歸可以從另外一個類繼承,難道這還不夠嗎?這需要了解一個名詞 可插入性 沙峻,因為Java語言是一個單繼承的語言睦授,換而言之,一個類只能有一個父類摔寨,因此去枷,在很多的情況下,這個類可能已經(jīng)有了父類,這個時候給他加上一個新的超類是不現(xiàn)實的删顶。但是接口是對可插入性的保證竖螃,在一個類的等級結構中的任何一類都可以實現(xiàn)一個接口,這個接口會影響到此類的所有子類逗余,但是不會影響到此類的任何父類特咆。此類將不得不實現(xiàn)這個接口所規(guī)定的方法,而其子類則可以從此類自動繼承到這些方法录粱,也可以選擇置換掉所有這些方法腻格,或者其中的某一些方法。這時候啥繁,這些子類就具有了可插入性菜职。
關聯(lián)的可插入性
一個對象要完成一項任務,所以需要知道其他對象输虱,并且調用其他對象的方法些楣,這個對象對其他對象的知識叫做關聯(lián)脂凶。
如果一個管理不是針對一個具體類宪睹,而是針對一個接口的,那么任何實現(xiàn)這個接口的類都可以滿足要求蚕钦。換而言之亭病,當前對象并不在意所關聯(lián)的是哪一個具體類,而僅僅關心這個類是否實現(xiàn)了某一個接口嘶居。
調用的可插入性
一個對象不可避免的需要調用其他對象的方法罪帖,這種調用不一定非得是是某一個具體類,而可以是一個接口邮屁。這樣一來整袁,任何實現(xiàn)了這個接口的具體類都可以被當前對象調用,而當前對象到底調用的是哪一個具體類的實例則完全可以冬天地決定佑吝。
因此坐昙,接口提供了關聯(lián)以及方法調用上的可插入性,軟件系統(tǒng)規(guī)模越大芋忿,生命周期越長炸客,接口的重要性就越大。接口使得軟件系統(tǒng)在靈活性和可擴展性戈钢,可插入性方面得到保證
類型
Java接口(以及Java抽象類)用來聲明一個新的類型
Java設計師應當主要使用Java接口和抽象Java類將軟件單位與內部和外部耦合起來痹仙。換而言之,應當使用Java接口和抽象Java類而不是具體類進行變量的類型聲明殉了,參量的類型聲明开仰,方法的返回類型聲明,以及參數(shù)類型的轉換等。當然抖所,一個更好的做法是僅僅使用Java接口梨州,而不要使用抽象Java類來做到上面這些。
在理想的情況下田轧,一個具體Java類應當只 實現(xiàn)Java接口和抽象Java類中聲明過的方法暴匠,而不應當給出多余的方法
我好累,今天就寫到這里吧