在定義一組可操作的方法
限制
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();
 }
}
執行結果

沒有留言:
張貼留言