7:多態性

再訪上傳(upcasting)
  把對象的reference當作基類的reference來用,被成為上傳(upcasting)。
 
  把對象的類型忘掉
 
問題的關鍵
 
  方法調用的綁定(binding)
    后綁定(late binding)是要在程序運行的時候,根據對象的類型來決定該綁定哪個方法。后綁定也被稱為“動態綁定(dynamic binding)”或“運行時綁定(run-time binding)”。
    除了static和final方法(private方法隱含有final的意思),JAVA的所有的方法都采用后綁定。
 
  產生正確的行為
 
  可擴展性
 
  錯誤:“覆寫”private的方法

抽象類和抽象方法
 
  抽象方法(abstract method):只有聲明,沒有正文。
 
構造函數與多態性
 
  構造函數的調用順序
    復雜對象的構造函數的調用順序尸這樣的:
      1。調用基類的構造函數。這是一個遞歸的過程,因此會先創建繼承體系的跟,然后是下一級派生類,依此類推,直到最后一個繼承類的構造函數。
      2。成員對象按照其聲明的順序進行初始化。
      3。執行繼承類的構造函數的正文。
 
  繼承與清理
    先進行派生類的清理,再進行基類的清理。
  多態方法在構造函數中的行為
    一個好的構造函數應該,“用最少的工作量把對象的狀態設置好,而且要盡可能地避免去調用方法。”構造函數唯一能安全調用的方法,就是基類的final方法 (這一條也適用private方法,因為它自動就是final的。)。他們不會被覆寫,因此也不會產生這種意外的行為。


用繼承來進行設計
  純繼承與擴展
 
  下傳與運行時的類型鑒別


總結:多態性是一種不能孤立的看待的特性(不像switch語句),相反只有放在類關系的“大背景”下,它才有用武之地。要想在編程中有效地使用多態性,以及面向對象的技術,那你就必須擴展你的編程視野,不能只關注單個類的數據成員和消息,而是要去理解類與類之間的共同性,以及他們之間的關系。雖然這個要求很高,但是這種努力是值得的,因為它能加速程序的開發,改善代碼的邏輯組織,使得程序更易于擴展,同時維護代碼也變得更方便了。

 

                                                                                 2005年03月13日 1:59 AM