iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Software Development

Java入門的30張門票系列 第 17

[Day17] 誰說兒子只能是兒子 - 多型

  • 分享至 

  • xImage
  •  

所謂的多型polymorphism是運用類別之間繼承的關係,使父類別可以當成子類別的通用型態。

直接舉個例子來解釋好了,一開始我有Dad類別,底下有Son、Daughter和Pet三個子類別,接下來我分別建立四個人,每個人都使用info()方法。

class Dad {
    public int money;
    public int house;
    public void info(){
        System.out.println("我很有錢");
    }
}

class Son extends Dad{
    public void info(){
        System.out.println("我是兒子");
    }
}

class Daughter extends Dad {
	public void info(){
        System.out.println("我是女兒");
    }
}

class Pet extends Dad {
	public void info(){
        System.out.println("我是寵物");
    }
}
class Test{
    public static void main(String[] args) {
    Dad a = new Dad();
    Dad b = new Son();
    Dad c = new Daughter();
    Dad d = new Pet();
    
    a.info();  // 我很有錢
    b.info();  // 我是兒子
    c.info();  // 我是女兒
    d.info();  // 我是寵物
    }
}

你會發現它們雖然都宣告為Dad,也都呼叫了Dad裡面的info()方法,但每個物件表現出來的都不一樣,因為他們的「本質」不一樣,現在我不管它們的「本質」到底是什麼,我只知道它們都是Dad,只要可以被視為Dad的物件,就可以使用這個方法而不會出錯。這樣的設計方式可以降低方法定義對類別的依賴,使用一個制定好的介面,利用該介面來操作不同的物件,增加程式的彈性及可維護性,設計上也比較有架構。

這樣講讓我看得好頭暈,簡單來說,在有多型的情況下,我知道Son、Daughter、Pet都可以被當成Dad,而我們要呼叫的info()也剛好有被定義在Dad中,所以只需要制定一個可以操作Dad這個介面的方法就好,整個程式碼簡潔很多。/images/emoticon/emoticon01.gif


上一篇
[Day16] 誰說一定要繼承家業 - 覆寫 & super
下一篇
[Day18] package & import
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言