菜雞與物件導向 (5): 多型
多型算是比較三特性之中給人感覺比較溫和的了,不如說只要有了繼承,那麼多型的到來就是必然的。多型的定義是:不同的物件能夠做出一樣的行為,但必須由他們自己的程式碼來實作。
白話一點說就是:一樣的事,不同做法。
多型相對是比較好理解的,畢竟每個人做同一件事的方法本來就不太一樣。例如一樣是泡奶茶,英國就正常地泡,美國就會用微波爐;一樣是肉粽,有些人就是比較愛吃油飯;到了程式的世界裡也是,即使繼承了同一個物件,實現這個行為的方式也可以不同。
在此可以先推菜鳥工程師肉豬的這篇 Java 什麼是多載(Overload), 覆寫(Override), 多型(Polymorphism) 中的說明。其中可以從例子看到儘管狗跟鳥都是繼承自動物這個類別,但對於「移動」這個方法,他們實作的方式並不一樣。這就是多型的範例。
我個人更喜歡用職位的方式去理解多型。
被繼承者就像是該職位的工作,例如說:Programmer
要會寫 C#、要會寫 SQL、要會 VB…等等,於是老闆就貼出了徵人啟示,要求新來的員工必須要有 Programmer
寫的能力:
public class Programmer
{
public virtual string WriteCSharp()
{
/* 努力地寫 C# */
}
public virtual string WriteSQL()
{
/* 努力地寫 SQL */
}
public virtual string WriteVB()
{
/* 努力地寫 VB */
}
}