Java初探:多型(Polymorphism)之簡單示範

在介紹了Java的介面(Interface)與抽象(Abstract)寫法之後,我們馬上來實驗一下物件導向中很重要的多型之觀念與寫法。

剛學介面的的人,一定覺得介面很無聊,如果你要規範某個類別一定要實作某些方法或欄位的話,那麼文件規範也辦的到。這樣的說法並沒有錯,但是沒有抽象(Abstract)、介面(Interface) 的實作,那麼你一定無法使用多型這個在物件導向設計中,非常重要的撰寫模型。話不多說,直接看下面的程式碼。

宣告一個遙控器的介面,並且規範之後實作(Implements)的類別,一定要具備turnOn()與turnOff()方法。

//RemoteControl.java
public interface RemoteControl
{
  public String getName();
  public String turnOn();
  public String turnOff();
}

創造一個冷氣遙控器類別,介面的部分是實作RemoteControl。

//AirConditioner.java
public class AirConditioner implements RemoteControl
{
  private String name;
  public AirConditioner(String cTemp) { this.name = cTemp; }
  public String getName() { return this.name; }
  public String turnOn()  { return "AirConditioner ON"; }
  public String turnOff() { return "AirConditioner OFF"; }
}

創造一個電動門遙控器類別,介面的部分是實作RemoteControl。

//ElectronicDoor.java
public class ElectronicDoor implements RemoteControl
{
  private String name;
  public ElectronicDoor(String cTemp) { this.name = cTemp; }
  public String getName() { return this.name; }
  public String turnOn()  { return "ElectronicDoor ON"; }
  public String turnOff() { return "ElectronicDoor OFF"; }
}

一切就緒,開始進行多型的調用,這就是多型的寫法,用遙控器來比喻是不是很感覺呢?

public class Test
{
  public static void main(String[] args)
  {
    Operater(new AirConditioner("Pansonic"));
    Operater(new ElectronicDoor("National"));
  }
  
  //Super Remote Controller
  public static void Operater(RemoteControl oRC)
  {
    System.out.println("RemoteName: " + oRC.getName());
    System.out.println(oRC.turnOn());
    System.out.println(oRC.turnOff());
  }
}

輸出結果如下:

C:\Java>java Test
RemoteName: Pansonic
AirConditioner ON
AirConditioner OFF
RemoteName: National
ElectronicDoor ON
ElectronicDoor OFF
Java SCJP 多型 多形 Polymorphism Abstract Interface