7:多態(tài)性

再訪上傳(upcasting)
  把對(duì)象的reference當(dāng)作基類的reference來用,被成為上傳(upcasting)。
 
  把對(duì)象的類型忘掉
 
問題的關(guān)鍵
 
  方法調(diào)用的綁定(binding)
    后綁定(late binding)是要在程序運(yùn)行的時(shí)候,根據(jù)對(duì)象的類型來決定該綁定哪個(gè)方法。后綁定也被稱為“動(dòng)態(tài)綁定(dynamic binding)”或“運(yùn)行時(shí)綁定(run-time binding)”。
    除了static和final方法(private方法隱含有final的意思),JAVA的所有的方法都采用后綁定。
 
  產(chǎn)生正確的行為
 
  可擴(kuò)展性
 
  錯(cuò)誤:“覆寫”private的方法

抽象類和抽象方法
 
  抽象方法(abstract method):只有聲明,沒有正文。
 
構(gòu)造函數(shù)與多態(tài)性
 
  構(gòu)造函數(shù)的調(diào)用順序
    復(fù)雜對(duì)象的構(gòu)造函數(shù)的調(diào)用順序尸這樣的:
      1。調(diào)用基類的構(gòu)造函數(shù)。這是一個(gè)遞歸的過程,因此會(huì)先創(chuàng)建繼承體系的跟,然后是下一級(jí)派生類,依此類推,直到最后一個(gè)繼承類的構(gòu)造函數(shù)。
      2。成員對(duì)象按照其聲明的順序進(jìn)行初始化。
      3。執(zhí)行繼承類的構(gòu)造函數(shù)的正文。
 
  繼承與清理
    先進(jìn)行派生類的清理,再進(jìn)行基類的清理。
  多態(tài)方法在構(gòu)造函數(shù)中的行為
    一個(gè)好的構(gòu)造函數(shù)應(yīng)該,“用最少的工作量把對(duì)象的狀態(tài)設(shè)置好,而且要盡可能地避免去調(diào)用方法。”構(gòu)造函數(shù)唯一能安全調(diào)用的方法,就是基類的final方法 (這一條也適用private方法,因?yàn)樗詣?dòng)就是final的。)。他們不會(huì)被覆寫,因此也不會(huì)產(chǎn)生這種意外的行為。


用繼承來進(jìn)行設(shè)計(jì)
  純繼承與擴(kuò)展
 
  下傳與運(yùn)行時(shí)的類型鑒別


總結(jié):多態(tài)性是一種不能孤立的看待的特性(不像switch語句),相反只有放在類關(guān)系的“大背景”下,它才有用武之地。要想在編程中有效地使用多態(tài)性,以及面向?qū)ο蟮募夹g(shù),那你就必須擴(kuò)展你的編程視野,不能只關(guān)注單個(gè)類的數(shù)據(jù)成員和消息,而是要去理解類與類之間的共同性,以及他們之間的關(guān)系。雖然這個(gè)要求很高,但是這種努力是值得的,因?yàn)樗芗铀俪绦虻拈_發(fā),改善代碼的邏輯組織,使得程序更易于擴(kuò)展,同時(shí)維護(hù)代碼也變得更方便了。

 

                                                                                 2005年03月13日 1:59 AM