Java語言的介面與型別安全_JSP編程
來源:互聯網
上載者:User
介面是實現構件可插入性的關鍵,可插入構件的關鍵在於存在一個公用的介面,以及每個構件實現了這個介面。
什麼是介面?
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介面常用方法
單方法介面
public interface Actionlistener(){
public abstract void actionPerformed(ActionEvent event);
}
僅且只有一個方法,只有實現了這個介面(重寫這個介面中的唯一一個方法),你才有資格去事件監聽器列表裡註冊(參數為Actionlistener類型),當事件來源變動時,自動調用這個唯一的actionPerformed方法.
標識介面
是沒有任何方法和屬性的介面。標識介面不對實現它的類有任何語意上的要求,它僅僅表明了實現它的類屬於一個特定的類型(傳遞)。
不推薦過多的使用標識介面。
常量介面
用Java介面來聲明一些常量,然後由實現這個介面的類使用這些常量(以前在做畫板的時候這麼幹過)。建議不要模仿這種常量介面的做法。
Java語言型別安全問題
Java是強型別的語言。這意味著Java編譯器會對代碼進行檢查,以確定沒一次賦值,每一次方法的調用是符合類型的。如果有任何不相符合的情況,Java編譯器就會給出錯誤。
類型檢查是基於這樣一個簡單的事實:每一變數的聲明都給這個變數一個類型;每一個方法包括構造器的聲明都給這個方法的特徵。這樣一來,Java編譯器可以對任何的運算式推斷出一個明顯類型,Java編譯器可以基於明顯類型對類型進行檢查。
Java語言是型別安全的。這就是說,任何被Java編譯器接受的合法的Java類保證是型別安全的。換言之,在程式運行期間,不會有任何類型的錯誤。一個Java程式根本不可能將一個本來屬於一個類型的變數當作另一個類型處理,因此也就不會產生由此而引起的錯誤。
簡單的說,Java語言依靠三種機製做到了型別安全:編譯期間的類型檢查,自動的儲存管理,數組的邊界檢查。
註:本篇大部分內容出之閻宏老師的《Java與模式》。