2014年4月16日 星期三

介面 interface

目的

在定義一組可操作的方法

限制

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();
 }
}

執行結果



沒有留言:

張貼留言