www.alphatom.com

          統計

          留言簿(1)

          閱讀排行榜

          評論排行榜

          多態? 你的理解是什么?

          在博客園我曾經發過這么一個隨筆,得到不少的相應,同樣希望能聽到java朋友們的高見

          wayfarer
          他的隨筆中談到了面試別人時的一個問題. 你是如何理解多態的.

          我想每個人的理解都不同,那么我們就來集思廣義吧.
          你可以從概念層 實現層,各個層面談談你對它的理解.角度越多,越能加深我們對它的理解.

          不過有個小要求,就是用一兩句話把你的意思表達出來.越是精練的語言,越能反應問題的實質.
          我們不要求全面但是要有內容.比如sumtec的面向對象就是面向接口.

          不過這里不要求一定是自己的見解,也可以是別的大家的看法.
          畢竟我們的目的是理解多態!

          我先拋磚引玉:
          多態就是實現將接口(不特指關鍵字interface)與實現分離的技術.


          評論:

          # re: 多態? 你的理解是什么? 2005-03-06 23:38 | alittlefish

          在實際操作中,多態可以讓我不用關心某個對象到底是什么具體類型,就可以使用該對象的某些方法,而這些方法通過一個抽象類或者接口來實現。
          從下往上看的話,多態實際上是多個對象的抽象,對它們進行通用編碼。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 08:41 | 一切從.NET開始

          沒有多態,工廠方法模式的效果就大打折扣,或者可以說不可能實現 :)
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 08:47 | 小詐

          對于相同的事件(不指一般我們說的那些事件),不同的對象表現出不同的行為(特征)。

          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 09:22 | KingofSC

          多態給我的感覺就是提供父類調用子類代碼的一個手段而已
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 09:29 | idior

          很好,繼續,希望看到更多更新的觀點。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 10:08 | age0

          繼承的目的是復用,繼承復用包括兩方面的復用:抽象(接口)復用,實現(過程)復用。

          多態的目的就是要將抽象復用及實現復用剝離開來,子類雖然擁有和父類一樣的抽象接口,但實現過程卻未必一樣,多態的引入就是要在繼承的基礎上實現變異的可能性。當然子類繼承也不一定會產生實現差異,所以多態允許在產生差異的時候override父類接口,沒有產生差異的時候直接繼承。

          interface
          則是另一種復用方式,interface只允許抽象復用,而禁止實現復用,所以interface比繼承顯得更輕量,但實際上系統中的實現復用必須由其他機制來保證。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 10:15 | age0

          To idior,想用一兩句話來解釋清楚一個深奧的概念是不是有點不切實際。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 10:53 | rIPPER

          一時 找不到sun oo-226課程了,里面應該有比較簡單明確的定義
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 10:59 | sysword

          我的理解,一個問題一般會表現在多個層面上,各個層面上抽象程度不同,多態正是思考問題過程中跨越各層的橋梁。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 11:09 | dudu

          我覺得多態是在對象的基礎上更高級的抽象, 它描述了一組具有共性的對象。
          Allen Lee
          的《今天你多態了嗎?》值得一讀: http://www.cnblogs.com/allenlooplee/archive/2004/11/02/59519.html
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 12:38 | 生活、工作

          運行時,才明確具體是指那個對象,這給client代碼,帶來了很大的靈活性。使依賴注入、針對抽象與接口編程、同一行代碼操作不同類的對象(用接口)等等成為可能。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 12:50 | idior

          我比較喜歡生活、工作的描述
          ◎age0
          如果概念解釋是很難用一兩句話說清。
          但是就像生活、工作這樣的描述就能有意義。


          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 17:43 | 班門弄斧

          多態是多個對象UpCast的過程
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 19:56 | 丁丁

          用人來表示基對象,多態就是對于不同種類的人(情圣或者情盲),拍MM馬屁雖然目的相同,但是效果很不相同,情圣說你好漂亮就抱得MM歸,而情盲拍得話,可能就被鋸
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-07 22:57 | Neter

          我比較同意小詐的觀點,多態就是具有相似功能的對象,有著不同的表現方法和行為。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-08 01:32 | NickLedson

          我的觀點是大大增強代碼的復用性,使得項目架構更加清晰,松耦合.
          比如在實際應用中我可以輕松繼承一個System.Window.Forms.Control命名空間下的類比如Button打造屬于自己的NixButton類而當一些原有系統的方法參數要求的傳入的參數類型是Button,我不必修改原有代碼而直接把NixButton的實例對象傳進去依然可用.

          從而達到代碼復用和架構松耦合的效果

          子類繼承了父類的所有接口,包括invoke handler/object對應表然后按繼承關系和invoke handler不同而調用不同的實現代碼!

          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-08 09:44 | idior

          小詐的觀點確實比較簡明的說出了多態的表現.
          希望看到更加深刻透徹的觀點.
          刪除評論  修改評論

          # re: 多態? 你的理解是什么? 2005-03-11 16:15 | myx

          一位司機在公共汽車上,有可能是乘客,有可能是司機,就就是多態吧^_^
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-13 06:21 | MindScape

          和小作的差不多,多態的本質根本是語義相同。

          多態是指,不同對象對應于同一動作語義具有不同的實際行為。


          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-13 18:10 | 龍蟄(NeoLee)

          呵,我也常在面試中提到對多態的理解,我的理解是:

          接口是面象對象的實現,多態是面象接口的應用!

          BTW:
          不太認同sumtec的面向對象就是面向接口. 面象對象更多的是一種開發思想,接口更多的是實現技術,用就是來表達不確切,但這么形容也道出接口是面象對象開發中實現抽象最主要的手段!
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-13 21:56 | idior

          sumtec的那句話當然不對,關鍵是道出很本質的東西。

          我覺得多態是面向接口的保證,支持。 而不是應用,關系反了吧。
          由于多態的支持才能面向接口。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-14 00:32 | 龍蟄(NeoLee)

          句中的應用有兩重含義:
          其一,多態是接口的特性。其二,就是對接口的應用,如在子類中override父類接口。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-26 23:09 | jsports

          我認為多態,首先蘊含有decorator 的味道---------->一樣的接口,但是功能上增強了。

          另外一方面,多太表明實現多態的class是一族的,
          對外部(外人)來講,只要知道有這個方法(標簽),
          具體運行時你是這個系列(族)的誰,我不關心,我只關心你能給我進行這個服務就行。
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-27 08:30 | 生活、工作

          通俗的說,先說明一項功能或動作,風馬牛不相及的東西去實現它。

          對服務器段代碼而言:
          訂下這個功能的設計時間較長,但寫時一下了就完成了,用1%的時間,但風馬牛不相及的東西去實現它時,耗時就多了,用99%的時間。

          對客戶端代碼而言:
          從使用的角度說:好處還是我上面所說的。
          從學院派的角度說:就是小詐的說法對于相同的事件(不指一般我們說的那些事件),不同的對象表現出不同的行為
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-03-27 11:41 | idior

          jsports和生活、工作的觀點都不錯 :)
          刪除評論  修改評論

          # re: 多態? 你的理解是什么? 2005-04-01 13:54 | ttyp

          多態是和繼承相反的概念
          多態是父類調子類的實現,繼承是子類調父類的實現,由于多態時不知道會被哪個子類繼承,所以定義的東西都是虛函數,當你執行這個虛函數時,首先找到該虛函數代表的實體子類,并執行子類中的相關代碼
          刪除評論  

          # re: 多態? 你的理解是什么? 2005-04-01 14:08 | idior

          @ttyp
          多態是和繼承相反的概念 interesting idea!
          刪除評論  修改評論

          # re: 多態? 你的理解是什么? 2005-04-09 13:24 | huangyi

          我從客戶和服務的角度來理解 就是

          服務可以由許多人來提供。
          而客戶只管使用服務,不需要知道服務的來源更不需要知道服務是如何實現的。另外,客戶也許還會有小秘,專門幫客戶選擇服務的。

          哎 多態讓客戶太舒服了啊 呵呵

           

          posted on 2005-04-09 16:13 idior 閱讀(1263) 評論(6)  編輯  收藏

          評論

          # re: 多態? 你的理解是什么? 2005-04-09 23:29 Pootow

          我以前是學C++的,那時候,人們說的多態分兩種,稱作編譯時多態和運行時多態。
          變異是多態的一個例子就是函數重載。
          運行時多態的例子就是virtual帶來的通過基類指針操作實際子類型的能力。
          可見,多態就是指同樣的一份代碼,卻可以做出不同動作。  回復  更多評論   

          # re: 多態? 你的理解是什么? 2005-06-30 15:50 sumtec

          今天為了搜點什么東西搜到這里,才發現原來以前的討論還跟我扯上關系了。不過我覺得有人說“接口更多的是實現技術”,覺得有點反了。  回復  更多評論   

          # re: 多態? 你的理解是什么? 2006-02-22 22:42 kknd

          core java i 的5e是這么說的: 多態就是一個對象變量能指向多種實際類型的現象叫多態 這可是最淺顯直接的回答了, 呵呵.   回復  更多評論   

          # re: 多態? 你的理解是什么?[未登錄] 2007-11-23 10:26 long

          多態就是通過接口訪問具體對象方法的技術  回復  更多評論   

          # re: 多態? 你的理解是什么? 2008-07-06 16:30 cowboy

          人多來說 反而會起反作用

          對于多態 我已經無從理解了  回復  更多評論   

          # field_subject_ricdronmon 2009-05-15 13:41 nick_ouzels

          http://www.message_roletoacboce.com/  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 屏山县| 南汇区| 溆浦县| 桐柏县| 金沙县| 宾川县| 湟中县| 万荣县| 托克托县| 大同市| 苗栗市| 高安市| 上虞市| 黑龙江省| 阿尔山市| 潞城市| 玛曲县| 池州市| 赣榆县| 韩城市| 沂水县| 阿荣旗| 伊川县| 托里县| 山西省| 加查县| 罗城| 安图县| 沂源县| 阳新县| 衡东县| 韩城市| 西吉县| 疏勒县| 正蓝旗| 白水县| 南部县| 民权县| 吉林省| 鄂托克旗| 工布江达县|