要明確Java中接口的做用首先要知道接口的定義:
Java中的接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,所以這些方法能夠在不一樣的地方被不一樣的類實現,而這些實現能夠具備不一樣的行爲(功能)。
接口的兩種含義:一,Java接口,Java語言中存在的結構,有特定的語法和結構;二,一個類所具備的方法的特徵集合,是一種邏輯上的抽象。前者叫作「Java接口」,後者叫作「接口」。
在Java語言規範中,一個方法的特徵僅包括方法的名字,參數的數目和種類,而不包括方法的返回類型,參數的名字以及所拋出來的異常。在Java編譯器檢查方法的重載時,會根據這些條件判斷兩個方法是不是重載方法。但在Java編譯器檢查方法的置換時,則會進一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
接口繼承和實現繼承的規則不一樣,一個類只有一個直接父類,但能夠實現多個接口。
Java接口自己沒有任何實現,由於Java接口不涉及表象,而只描述public行爲,因此Java接口比Java抽象類更抽象化。
Java接口的方法只能是抽象的和公開的,Java接口不能有構造器,Java接口能夠有public,靜態的和final屬性。
接口把方法的特徵和方法的實現分割開來。這種分割體如今接口經常表明一個角色,它包裝與該角色相關的操做和屬性,而實現這個接口的類即是扮演這個角色的演員。一個角色由不一樣的演員來演,而不一樣的演員之間除了扮演一個共同的角色以外,並不要求其它的共同之處。java
爲何使用接口?
兩個類中的兩個相似的功能,調用他們的類動態的決定一種實現,那他們提供一個抽象父類,子類分別實現父類所定義的方法。
問題的出現:Java是一種單繼承的語言,通常狀況下,哪一個具體類可能已經有了一個超類,解決是給它的父類加父類,或者給它父類的父類加父類,只到移動到類等級結構的最頂端。這樣一來,對一個具體類的可插入性的設計,就變成了對整個等級結構中全部類的修改。
接口是可插入性的保證
在一個等級結構中的任何一個類均可以實現一個接口,這個接口會影響到此類的全部子類,但不會影響到此類的任何超類。此類將不得不實現這個接口所規定的方法,而其子類能夠今後類自動繼承這些方法,固然也能夠選擇置換掉全部的這些方法,或者其中的某一些方法,這時候,這些子類具備了可插入性(而且能夠用這個接口類型裝載,傳遞實現了他的全部子類)。
咱們關心的不是那一個具體的類,而是這個類是否實現了咱們須要的接口。
接口提供了關聯以及方法調用上的可插入性,軟件系統的規模越大,生命週期越長,接口使得軟件系統的靈活性和可擴展性,可插入性方面獲得保證。編程
類型
使用Java接口將軟件單位與內部和外部耦合起來。使用Java接口不是具體的類進行變量的類型聲明,方法的返還類型聲明,參量的類型聲明,以及數據類型的轉換。
在理想的狀況下,一個具體的Java類應當只實現Java接口和抽象Java類中聲明的方法,而不該當給多餘方法。
類型等級結構
Java接口(以及抽象類)通常用來做爲一個類型的等級結構的起點。
若是一個類已經有了一個主要的超類型,那麼經過實現一個接口,這個類能夠擁有另外一個次要的超類型,這種次要的超類型叫作混合類型。
Java接口經常使用方法
單方法接口設計
public inte***ce Actionlistener(){orm
public abstract void actionPerformed(ActionEvent event);繼承
}接口
僅且只有一個方法,只有實現了這個接口(重寫這個接口中的惟一一個方法),你纔有資格去事件監聽器列表裏註冊(參數爲Actionlistener類型),當事件源變更時,自動調用這個惟一的actionPerformed方法。
標識接口
是沒有任何方法和屬性的接口。標識接口不對實現它的類有任何語意上的要求,它僅僅代表了實現它的類屬於一個特定的類型(傳遞)。不推薦過多的使用標識接口。
常量接口
用Java接口來聲明一些常量,而後由實現這個接口的類使用這些常量(之前在作畫板的時候這麼幹過)。建議不要模仿這種常量接口的作法。生命週期
綜上所述,筆者爲你們簡單總結了幾點接口的做用:
一、接口是java中的一大特性和一大支柱性的優勢;
二、接口用來別具體的類實現,會自動繼承接口中的抽象方法給這類繼承他的類;
三、接口有點像是複製的意思。只不過是java中是這麼寫罷了;
四、如今已經開始「面向接口編程時代」,利用接口來解耦;
五、接口中的方法必定都會被繼承他的類實現,若是少繼承了或者沒有繼承會報錯。
事件