繼承,接口,抽象類的區別是面試官最喜歡問的問題,因為編程中常用,這里不想說那些老生常談,只想借相聲打個比方.
繼承好比家學淵源,所謂"忠厚傳家久,詩書繼世長",家長總會潛移默化的影響下一代,下一代也會在不經意中學習前輩的特點,但因為年少分辨能力不高加上世易時移有些優點已經不再是有點甚至會變成缺點,下一代會把前輩的優缺點不分良莠的繼承下來.這也是日后出現問題的根源.
接口好比拜師學藝,"入了這個門,就得說這行話",比如相聲界說學逗唱四門是必須要學的,但是"師傅領進門,修行在個人",學得怎么樣還全看自己,指望不費力的繼承什么是不可能的,具體功夫還得個人來過. 因為是自己來,具體實現成什么樣自由度也很大,比如四門功課中的"唱",原指唱太平歌詞,但因為愛聽的少,現在相聲演員已經不要求這個了,改為唱歌唱戲的唱,其實嚴格界定的話是"學"的一種.這也無所謂對錯,郭德剛堅持唱太平歌詞也行,笑林唱流行歌曲也不錯,總之實現了就可以,實現得怎么樣則留給實踐來檢驗.一個類可以同時實現多個接口,就和藝人拜幾個師傅是沒有問題的,郭德剛就同時實現了大鼓和相聲兩個接口.
抽象類則介于繼承和接口之間,既可不費力的從上一代繼承,也可強制實現某接口,有如某大師收自己的孩子為徒,當然相聲界不讓這么干,其它曲藝行業還是可以的,比如京劇界的梅蘭芳和其子梅葆玖,既有言傳身教,也有強制實現,綜合了繼承和接口的特點.
具體怎么用它們要看實際需要,如果是為了實現繼承體系,當然是用繼承;如果只是強制子類必須和父類統一口徑,自然是用接口;如果子類說統一口徑行,但必須給我些東西,那還是用抽象類不可.
原文:
http://www.tkk7.com/sitinspring/archive/2007/06/04/121715.html