所謂的多型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這個介面的方法就好,整個程式碼簡潔很多。