在定義一組可操作的方法
限制
1. 實作某介面的類別,則必須實作該介面所定義的所有方法
2. 介面內部的 field 全部都是常數、全部的 method 都是抽象方法
語法
介面使用修飾詞 interface 去宣告介面類別。介面的成員(field 與方法 method)通常前面不會加上修飾子,但是這種情況下和在介面的 field 前面加上 public static final 、介面的 method 前面加上 abstract (抽象方法)具有相同的效果。
修飾子 interface 介面名稱 { 資料型態 field 名稱 = 運算式; // field 一定要初始化,常數宣告; 傳回值的資料型態 method 名稱 ( ); //方法簽名 }
介面使用修飾詞 implement 去實作介面類別。
class 類別名稱 implements 介面名稱 { ... }
介面多重繼承
Java 並不支援多重繼承,但透過實作一個子類別能同時繼承自2個以上的父類別的方式,仍然可以達成多重繼承 method 名稱的目的。
class 類別名稱 implements 介面名稱1, 介面名稱2, ... { ... }要注意:繼承某抽象類別的類別必定是該抽象類別的一個子類別,但實作某介面的類別並不歸屬於那一類,一個物件上可以實作多個界面。
介面的延伸
介面與一般類別一樣,可以透過延伸 extends 的方式產生新的介面。原來的介面稱為父介面 superinterface,而衍生出來地稱為子介面 subinterface。
interface 子介面名稱 extends 父介面名稱1, 父介面名稱2, ... { ... }要注意:雖然父介面衍生出子介面時使用的是 extends,但要實作介面類別時,仍然要用 implements 這保留字。
範例
類別檔案:Vehicle.java
public interface Vehicle { void vShow(); }
類別檔案:Material.java
public interface Material { void mShow(); }
類別檔案:Car.java
public class Car implements Vehicle, Material { private int model; public Car(int model) { this.model = model; } public void vShow(){ System.out.println("Car model is " + model); } public void mShow(){ System.out.println("Car material is steel"); } }
類別檔案:InterfaceTest.java
public class InterfaceTest { public static void main(String[] args) { Car car1 = new Car(1); car1.vShow(); car1.mShow(); } }
執行結果
沒有留言:
張貼留言