在博客園我曾經(jīng)發(fā)過這么一個隨筆,得到不少的相應(yīng),同樣希望能聽到j(luò)ava朋友們的高見 
wayfarer在他的隨筆中談到了面試別人時的一個問題. 你是如何理解多態(tài)的.
我想每個人的理解都不同,那么我們就來集思廣義吧.
你可以從概念層 實現(xiàn)層,各個層面談?wù)勀銓λ睦斫?SPAN lang=EN-US>.角度越多,越能加深我們對它的理解.
不過有個小要求,就是用一兩句話把你的意思表達出來.越是精練的語言,越能反應(yīng)問題的實質(zhì).
我們不要求全面但是要有內(nèi)容.比如sumtec的面向?qū)ο缶褪敲嫦蚪涌?SPAN lang=EN-US>.
不過這里不要求一定是自己的見解,也可以是別的大家的看法.
畢竟我們的目的是理解多態(tài)!
我先拋磚引玉:
多態(tài)就是實現(xiàn)將接口(不特指關(guān)鍵字interface)與實現(xiàn)分離的技術(shù).
評論:
# re: 多態(tài)? 你的理解是什么? 2005-03-06 23:38 | alittlefish
在實際操作中,多態(tài)可以讓我不用關(guān)心某個對象到底是什么具體類型,就可以使用該對象的某些方法,而這些方法通過一個抽象類或者接口來實現(xiàn)。
從下往上看的話,多態(tài)實際上是多個對象的抽象,對它們進行通用編碼。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 08:41 | 一切從.NET開始
沒有多態(tài),工廠方法模式的效果就大打折扣,或者可以說不可能實現(xiàn) :)
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 08:47 | 小詐
對于相同的事件(不指一般我們說的那些事件),不同的對象表現(xiàn)出不同的行為(特征)。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 09:22 | KingofSC
多態(tài)給我的感覺就是提供父類調(diào)用子類代碼的一個手段而已
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 09:29 | idior
很好,繼續(xù),希望看到更多更新的觀點。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 10:08 | age0
繼承的目的是復(fù)用,繼承復(fù)用包括兩方面的復(fù)用:抽象(接口)復(fù)用,實現(xiàn)(過程)復(fù)用。
多態(tài)的目的就是要將抽象復(fù)用及實現(xiàn)復(fù)用剝離開來,子類雖然擁有和父類一樣的抽象接口,但實現(xiàn)過程卻未必一樣,多態(tài)的引入就是要在繼承的基礎(chǔ)上實現(xiàn)變異的可能性。當(dāng)然子類繼承也不一定會產(chǎn)生實現(xiàn)差異,所以多態(tài)允許在產(chǎn)生差異的時候override父類接口,沒有產(chǎn)生差異的時候直接繼承。
interface則是另一種復(fù)用方式,interface只允許抽象復(fù)用,而禁止實現(xiàn)復(fù)用,所以interface比繼承顯得更輕量,但實際上系統(tǒng)中的實現(xiàn)復(fù)用必須由其他機制來保證。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 10:15 | age0
To idior,想用一兩句話來解釋清楚一個深奧的概念是不是有點不切實際。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 10:53 | rIPPER
一時 找不到sun 的 oo-226課程了,里面應(yīng)該有比較簡單明確的定義
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 10:59 | sysword
我的理解,一個問題一般會表現(xiàn)在多個層面上,各個層面上抽象程度不同,多態(tài)正是思考問題過程中跨越各層的橋梁。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 11:09 | dudu
我覺得多態(tài)是在對象的基礎(chǔ)上更高級的抽象, 它描述了一組具有共性的對象。
Allen Lee的《今天你多態(tài)了嗎?》值得一讀: http://www.cnblogs.com/allenlooplee/archive/2004/11/02/59519.html
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 12:38 | 生活、工作
運行時,才明確具體是指那個對象,這給client代碼,帶來了很大的靈活性。使依賴注入、針對抽象與接口編程、同一行代碼操作不同類的對象(用接口)等等成為可能。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 12:50 | idior
我比較喜歡 “生活、工作”的描述
◎age0
如果概念解釋是很難用一兩句話說清。
但是就像“生活、工作”這樣的描述就能有意義。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 17:43 | 班門弄斧
多態(tài)是多個對象UpCast的過程
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 19:56 | 丁丁
用人來表示基對象,多態(tài)就是對于不同種類的人(情圣或者情盲),拍MM馬屁雖然目的相同,但是效果很不相同,情圣說“你好漂亮”就抱得MM歸,而情盲拍得話,可能就被鋸
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-07 22:57 | Neter
我比較同意小詐的觀點,多態(tài)就是具有相似功能的對象,有著不同的表現(xiàn)方法和行為。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-08 01:32 | NickLedson
我的觀點是大大增強代碼的復(fù)用性,使得項目架構(gòu)更加清晰,松耦合.
比如在實際應(yīng)用中我可以輕松繼承一個System.Window.Forms.Control命名空間下的類比如Button打造屬于自己的NixButton類而當(dāng)一些原有系統(tǒng)的方法參數(shù)要求的傳入的參數(shù)類型是Button時,我不必修改原有代碼而直接把NixButton的實例對象傳進去依然可用.
從而達到代碼復(fù)用和架構(gòu)松耦合的效果
子類繼承了父類的所有接口,包括invoke handler/object對應(yīng)表然后按繼承關(guān)系和invoke handler不同而調(diào)用不同的實現(xiàn)代碼!
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-08 09:44 | idior
小詐的觀點確實比較簡明的說出了多態(tài)的表現(xiàn).
希望看到更加深刻透徹的觀點.
刪除評論 修改評論
# re: 多態(tài)? 你的理解是什么? 2005-03-11 16:15 | myx
一位司機在公共汽車上,有可能是乘客,有可能是司機,就就是多態(tài)吧^_^
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-13 06:21 | MindScape
和小作的差不多,多態(tài)的本質(zhì)根本是語義相同。
多態(tài)是指,不同對象對應(yīng)于同一動作語義具有不同的實際行為。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-13 18:10 | 龍蟄(NeoLee)
呵,我也常在面試中提到對“多態(tài)”的理解,我的理解是:
接口是面象對象的實現(xiàn),多態(tài)是面象接口的應(yīng)用!
BTW:不太認(rèn)同sumtec的面向?qū)ο缶褪敲嫦蚪涌?SPAN lang=EN-US>. 面象對象更多的是一種開發(fā)思想,接口更多的是實現(xiàn)技術(shù),用“就是”來表達不確切,但這么形容也道出接口是面象對象開發(fā)中實現(xiàn)抽象最主要的手段!
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-13 21:56 | idior
sumtec的那句話當(dāng)然”不對“,關(guān)鍵是道出很本質(zhì)的東西。
我覺得多態(tài)是面向接口的保證,支持。 而不是應(yīng)用,關(guān)系反了吧。
由于多態(tài)的支持才能面向接口。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-14 00:32 | 龍蟄(NeoLee)
句中的“應(yīng)用”有兩重含義:
其一,多態(tài)是接口的特性。其二,就是對接口的應(yīng)用,如在子類中override父類接口。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-26 23:09 | jsports
我認(rèn)為多態(tài),首先蘊含有decorator 的味道---------->一樣的接口,但是功能上增強了。
另外一方面,多太表明實現(xiàn)多態(tài)的class是一族的,
對外部(外人)來講,只要知道有這個方法(標(biāo)簽),
具體運行時你是這個系列(族)的誰,我不關(guān)心,我只關(guān)心你能給我進行這個服務(wù)就行。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-27 08:30 | 生活、工作
通俗的說,先說明一項功能或動作,風(fēng)馬牛不相及的東西去實現(xiàn)它。
對服務(wù)器段代碼而言:
訂下這個功能的設(shè)計時間較長,但寫時一下了就完成了,用1%的時間,但風(fēng)馬牛不相及的東西去實現(xiàn)它時,耗時就多了,用99%的時間。
對客戶端代碼而言:
從使用的角度說:好處還是我上面所說的。
從學(xué)院派的角度說:就是小詐的說法“對于相同的事件(不指一般我們說的那些事件),不同的對象表現(xiàn)出不同的行為”。
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-03-27 11:41 | idior
jsports和生活、工作的觀點都不錯 :)
刪除評論 修改評論
# re: 多態(tài)? 你的理解是什么? 2005-04-01 13:54 | ttyp
多態(tài)是和繼承相反的概念
多態(tài)是父類調(diào)子類的實現(xiàn),繼承是子類調(diào)父類的實現(xiàn),由于多態(tài)時不知道會被哪個子類繼承,所以定義的東西都是虛函數(shù),當(dāng)你執(zhí)行這個虛函數(shù)時,首先找到該虛函數(shù)代表的實體子類,并執(zhí)行子類中的相關(guān)代碼
刪除評論
# re: 多態(tài)? 你的理解是什么? 2005-04-01 14:08 | idior
@ttyp
多態(tài)是和繼承相反的概念 interesting idea!
刪除評論 修改評論
# re: 多態(tài)? 你的理解是什么? 2005-04-09 13:24 | huangyi
我從客戶和服務(wù)的角度來理解 就是
服務(wù)可以由許多人來提供。
而客戶只管使用服務(wù),不需要知道服務(wù)的來源更不需要知道服務(wù)是如何實現(xiàn)的。另外,客戶也許還會有小秘,專門幫客戶選擇服務(wù)的。
哎 多態(tài)讓客戶太舒服了啊 呵呵