1 of 14

抽象類別、介面

2 of 14

抽象類別的使用時機

  • 先有繼承的架構

  • 判斷父類別是否需要物件實體

  • 若不需要,則可將父類別宣告為抽象類別,以明確的禁止物件建立

3 of 14

撰寫抽象類別

  • 使用 abstract 關鍵字宣告類別為抽象類別��public abstract class ElectricEquip{� .....�}

  • 程式不可以直接建立抽象類別的物件,就算寫了建構式也不能用��ElectricEquip equp = new ElectricEquip(5); // Error�Computer com = new Computer(5, 2, 4); // OK

4 of 14

抽象類別的規則

  • 不可直接建立抽象類別的物件實體

  • 抽象類別可被繼承

5 of 14

課堂練習

  • 經過思考判斷後,決定將電器宣告為抽象類別,以增強類別架構的完整性

6 of 14

新的需求

  • 想追蹤電器的使用狀況,提供控制電器開關的模擬功能。

  • 想管理家中更多的物品,可能並非電器,但仍有開關的設計,例如:水龍頭

7 of 14

撰寫電視的開關功能

public class Television extends EletricEquip{

// 省略其他部分

public void start(){

this.wattage = 2; // 開始運作,設置耗電量

}

public void stop(){

this.wattage = 0; // 停止運作,不耗電

}

}

8 of 14

撰寫水龍頭類別

public class Faucet{� private int water; // 出水量

public Faucet(int water){

this.water = water;

}

public void start(){

this.water = 5;

}

public void stop(){

this.water = 0;

}�}

9 of 14

介面的概念

  • 若各種不同種類的東西,共享某些相同的操作方式、傳輸方式、計算方式等等,這些共享的概念稱為介面。��共享傳輸方式:USB 介面、IDE 介面�共享操作方式:燈座、插頭、開關控制�共享計算方式:資料序列化的計算��..... 等等等 .....

10 of 14

設計一個開關控制介面

public interface Controller{

void start();

void stop();

}

  • 設計介面時,思考類別間共享的方法是甚麼,並寫出方法的回傳值型態、名稱、參數

  • 所有寫在介面中的方法,權限控制都是 public,所以可忽略不寫

11 of 14

讓類別實作開關介面

public class Television extends ElectricEquip

implements Controller{

// 必須確實撰寫介面中定義的所有方法

}

public class Faucet implements Controller{

// 必須確實撰寫介面中定義的所有方法

}

12 of 14

介面可以是一種資料型態

  • 介面在 Java 中可當作一種資料型態,接受任何實作該介面的物件實體��Controller c1 = new Television(2, 24);�Controller c2 = new Faucet(0);

13 of 14

課堂練習

  • 按照上述內容提供控制器介面,並提供開關操作的靜態方法

14 of 14

實作多個介面

  • Java 類別一次只能繼承一個父類別,但可以實作很多個介面