介面
(英文:Interface),在JAVA程式語言中是一個抽象類型,是抽象方法的集合,介面通常以interface來宣告。一個類別透過繼承介面的方式,從而來繼承介面的抽象方法。
介面並不是類,寫介面的方式和類別很相似,但是它們屬於不同的概念。類別描述物件的屬性和方法。介面則包含類別要實作的方法。
除非實作介面的類別是抽象類別,否則該類別要定義介面中的所有方法。
介面無法被實例化,但是可以被實作。一個實作介面的類,必須實作介面內所描述的所有方法,否則就必須宣告為抽象類別。另外,在 Java 中,介面類型可用來宣告一個變量,他們可以成為一個空指針,或是被綁定在一個以此介面實現的物件。
介面的宣告語法格式如下:
[可见度] interface 接口名称 [extends 其他的接口名] { // 声明变量 // 抽象方法}
功能
在Java語言規格中,一個方法的特徵僅包括方法的名字,參數的數目和種類,而不包括方法的返回類型,參數的名字以及所拋出的異常。當Java編譯器檢查方法的重載時,會根據這些條件判斷兩個方法是否為重載方法。但在Java編譯器檢查方法的置換時,則會進一步檢查兩個方法(分處超類型和子類型)的返還類型和拋出的異常是否相同。
介面實作和類別繼承的規則不同,為了資料的安全,繼承時一個類別只有一個直接父類,也就是單繼承,但是一個類別可以實作多個接口,介面彌補了類別的不能多繼承缺點,繼承和介面的雙重設計既保持了類別的資料安全也變相實現了多繼承。
Java介面本身沒有任何實現,因為Java介面不涉及表象,而只描述public行為,所以Java介面比Java抽象類別更抽象化。但是介面不是類,不能使用new 運算子實例化一個介面。如 x=new comparable(......);//這個是錯誤來的。但是可以宣告介面變數Comparable x; //這是允許的。
Java介面的方法只能是抽象的、公開的,Java介面不能有建構器,Java介面可以有public、static和final屬性。即介面中的屬性可以定義為 public static final int value=5; [1]
介面將方法的特性和方法的實作分割開來。這種分割體現在介面常常代表一個角色,它包裝與該角色相關的操作和屬性,而實作這個介面的類別便是扮演這個角色的演員。一個角色由不同的演員來演,而不同的演員之間除了扮演一個共同的角色之外,並不要求其它的共同點。
使用
兩個類別中的兩個類似的功能,呼叫他們的類別動態的決定一種實現,那他們提供一個抽象父類,子類別分別實作父類別所定義的方法。
問題的出現:Java是一種單繼承的語言,一般情況下,哪個具體類別可能已經有了一個超類,解決是給它的父類加父類,或者給它父類的父類加父類,直到移動到類別等級結構的最頂端。這樣一來,對一個具體類別的可插入性的設計,就變成了對整個等級結構中所有類別的修改。
可插入性
在一個等級結構中的任何一個類別都可以實作一個接口,這個接口會影響到所有此類的子類,但不會影響到此類的任何超類別。此類別將不得不實現這個介面所規定的方法,而其子類別可以從此類自動繼承這些方法,當然也可以選擇置換掉所有的這些方法,或者其中的某一些方法,這時候,這些子類別具有了可插入性(並且可以用這個介面類型裝載,傳遞實現了他的所有子類別)。
我們關心的不是那一個具體的類,而是這個類別是否實作了我們需要的介面。
介面提供了關聯以及方法呼叫上的可插入性,軟體系統的規模越大,生命週期越長,介面使得軟體系統的靈活性和可擴展性,可插入性方面得到保證。
類型
使用Java介面將軟體單位與內部和外部耦合。使用Java介面不是特定的類別進行變數的類型聲明,方法的返還類型聲明,參量的類型聲明,以及資料類型的轉換。
在理想的情況下,一個特定的Java類別應只實作Java介面和抽象Java類別中宣告的方法,而不應給多餘方法。
等級結構
Java介面(以及抽象類別)一般用來作為一個類型的等級結構的起點。
如果一個類別已經有了一個主要的超類型(父類別),那麼透過實作一個接口,這個類別可以擁有另一個次要的超類型,這種次要的超類型叫做混合型別。
相關學習推薦:java基礎教學
以上是在java中什麼是接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!