介面 (Interface)
介面的概念有點類似抽象類別,但介面內純粹只能有常數型別資料成員宣告及介面方法原型宣告 (沒有實作程式碼),所以介面資料成員只能宣告為public、static及final,而介面方法只能宣告為public及abstract。介面定義的語法如下:
public abstract interface interface-name [extends interface1, interface2, …]{
public static final data-type data- members-name = values; // 資料成員宣告
public abstract data-type interface-methods(); // 類別方法宣告
}
下列程式碼宣告了ISHAPE介面
1. public abstract interface ISHAPE {
2. public static final float pi = 3.14F;
3. public abstract float area();
4. public abstract float perimeter();
5. public abstract void showinfo();
6. }
由於介面之定義、介面方法及資料成員宣告方式都已被嚴格規範修飾字,因此,ISHAPE介面也可簡化如下:
1. interface ISHAPE {
2. float pi = 3.14F;
3. float area();
4. float perimeter();
5. void showinfo();
6. }
另外,介面只能使用常數資料成員 (宣告的資料成員預設都會加上final修飾字),因此所有資料成員都必須給定資料值,同時不允許在程式中變更資料值。
介面與抽象類別之間還有一個差異點,介面之間允許多重繼承,但類別之間只能存在單一繼承。類別要實作介面時,必須在類別宣告別使用implements關鍵字,下圖說明類別與介面間的繼承關係。
以下CIRCLE類別實作ISHAPE介面,在CIRCLE類別中並未宣告pi資料成員,但卻可以使用pi,這是因為CIRCLE繼承了ISHAPE介面的pi資料成員。
1. public class CIRCLE implements ISHAPE {
2. private float radius; // 資料成員
3. public CIRCLE (float r) { // 建構子
4. radius = r;
5. }
6. public float area() {
7. return pi*radius*radius; // 實作圓面積計算
8. }
9. public float perimeter() {
10. return 2*pi*radius; // 實作圓周長計算
11. }
12. public void showinfo() {
13. System.out.println ("This is a circle");
14. }
15. }