解析Java語言的介面與型別安全(轉)
解析Java語言的介面與型別安全(轉)[@more@] 介面是實現構件可插入性的關鍵,可插入構件的關鍵在於存在一個公用的介面,以及每個構件實現了這個介面。 什麼是介面? 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語言依靠三種機制做到了型別安全:編譯期間的型別檢查,自動的儲存管理,陣列的邊界檢查。
·上一篇:·下一篇:
最新更新 | ||
······························ |
| ||
| | | | | | | | ||
| ||
Copyright © 2004 - 2007 All Rights Reserved
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10763080/viewspace-970193/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- Java 語言是強型別語言語言(轉)Java型別
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- 解釋型語言與編譯型語言的區別?編譯
- 澄清Java語言介面與繼承的本質(轉)Java繼承
- Java與C語言的區別?JavaC語言
- 語言型別介紹及其Python的語言型別型別Python
- 動態語言與鴨子型別型別
- C語言的隱式型別轉換C語言型別
- Java語言與平臺的區別Java
- 淺談強型別語言與弱型別語言,歡迎大家來點評型別
- java型別轉換與強制型別轉換(轉)Java型別
- go語言資料型別轉換Go資料型別
- 計算機語言:編譯型/解釋型、動態語言/靜態語言、強型別語言/弱型別語言計算機編譯型別
- java語言操作Oracle資料庫中的CLOB資料型別 (轉)JavaOracle資料庫資料型別
- 解釋型語言、編譯型語言 區別編譯
- Go語言5大基本資料型別解析Go資料型別
- 編譯型語言與解釋型語言編譯
- Java語言的新密封Sealed型別簡介 - Ben EvansJava型別
- C語言型別轉換大學霸IT達人C語言型別
- q語言的資料型別資料型別
- 羅素悖論 型別系統與程式語言型別
- 編譯型語言和解釋型語言的區別編譯
- go語言資料型別-基礎型別Go資料型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- Java安全——語言本身的設計Java
- Java中基本型別Array與複合型別List的互相轉換Java型別
- C語言資料型別C語言資料型別
- C語言(共用體型別)C語言型別
- go語言——資料型別Go資料型別
- java 基礎型別與byte[]的轉換Java型別
- GO語言————8.4 map 型別的切片Go型別
- c語言的基本資料型別C語言資料型別
- 強型別語言變數和資料型別的理解變數資料型別
- C語言(typedef 型別取別名)C語言型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 【R語言入門】R語言中的變數與基本資料型別R語言變數資料型別
- Java™ 教程(將介面用作型別)Java型別
- [轉]ABAP資料型別與Java資料型別的對應關係資料型別Java