基礎程式設計(19)-介面與多重繼承

多重繼承是指一個類別繼承多個父類別,但是Java不支援多重繼承,所以設計介面(Interface)來達到多重繼承的目的。

介面與類別

介面和類別一樣是屬於參考的資料型態,它和抽象類別的差異如下:

  • 抽象類別可以實作方法或是單純宣告,而介面方法都只是單純宣告,沒有實作的程式碼。
  • 類別繼承必須在同一個家族內,但介面不受這種依存關係影響,即使是毫無關係的類別也能實作同一個介面。
  • 一個類別只能夠繼承單一個抽象類別,但可以實作數個介面。

介面宣告

在介面宣告裡所有的方法都屬於抽象方法,因此實作的類別必須實作”所有”的方法。介面宣告的方式如下:

interface 介面名稱
{
    final 資料型態 常數 = 值;
    ...
    回傳值 介面方法(參數列);
    ...
}

介面宣告裡的方法雖然沒有寫任何修飾字,但實際上隱含著 public 與 abstract 的特性,不需要特別寫上去。另外,介面也可以包含常數宣告,並隱含著 public、final 與 static 修飾字。

當一個類別要實作介面時,宣告的方法如下:

class 類別名稱 implements 介面名稱1, 介面名稱2
{
    //額外的屬性和方法
}

如果類別同時繼承父類別與實作介面時,繼承的 extends 語法寫在 implements 的前面。

介面繼承

Java的介面不能隨便的新增方法,因為介面方法一定要實作,所以如果突然新增了一個方法,舊有實作介面的類別就必須跟著改寫。為了必免更新介面可能產生的問題,當我們需要擴充介面方法時,可以利用繼承的方式擴充,讓介面繼承其它介面:

interface 介面名稱 extends 繼承介面1, 繼承介面2
{
    //擴充的常數和方法
}