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