龍生九子
----多態
作者:HolyFire
一龍生九子,子子皆不同。這個道理說的是世界上沒有兩個或兩個以上的事物是完全相同的,事物之間有相同相似的一面,當然也有不同相異的一面。只有將不同的和相同的都考慮進來,才能完整的表達事物。
事物的屬性有著不同的一面。我們知道人感知事物的一個途徑是觀察,用對不同光線的反應來識別物體,所以我們給出事物的一個屬性,顏色。有時候一些物體的顏色是固定的,白色的雲,蔚藍的天空,碧綠的草地,不禁令人神游太虛。
但有些方面是不確定的,有一句話說道:“月有陰晴圓缺,人有悲歡離合”,這句話還不足以說明這個道理。我們中文裡有時候會省略一些部分,“今天你吃了沒有?”吃的是什麼,“早飯”,“下午茶”,“面包”,不知道。這裡將吃東西抽象化了,這句話可以在早上說,中午說,晚上說,任何一個適合的時間段都可以說。感興趣的地方出現了,我們不知道吃什麼東西,什麼時候吃,但是卻可以使用它,簡要的表達一下你的問候。這樣簡單的設下伏筆,在具體需要的環境才用具體表現出來具體的用法,被廣泛運用在生活中。“我砍!”表達了一個人要做的動作,具體砍什麼,只有感興趣的人才會去關注。“我生病了。”表達了一個人的狀態,具體生的什麼病,不是人人都想知道的。
多態--就是指事物不同的方面
多態是一種復雜的應用,要全面的闡述它很難,所以理解它的思想就成了重點。在不同情況下,秉承它的思想,用不同的方法實現多態。
還記得C++中的虛函數嗎,我在《後入為主----虛函數》中講過,虛函數可以動態改變,運用這個特性就能實現我們的目的了。不同的語言使用不同的方法,實現的機制就是一個類型提供的接口可以改變。這樣就能體現不同這個思想了。
為了更好理解,我們用C++實現一個例子。
我們知道,要生活,就要工作,工作是人的社會行為,幾乎人人都在工作。世界上有形形色色的人,人的工作的區分在什麼地方呢,那就是它的職業,不同職業的人做不同的事。
學生的工作就是學習,司機的工作是開車,小販的工作是賣商品,程序員的工作是編寫代碼。
現在我們分析一下,世界上有很多人,人都要工作
人 { 工作 = 未確定 }
學生的工作是學習
學生 { 人 , 工作 = 學習 }
司機的工作是開車
司機 { 人 , 工作 = 開車 }