7:多態(tài)性
再訪上傳(upcasting)
把對象的reference當作基類的reference來用,被成為上傳(upcasting)。
把對象的類型忘掉
問題的關鍵
方法調(diào)用的綁定(binding)
后綁定(late binding)是要在程序運行的時候,根據(jù)對象的類型來決定該綁定哪個方法。后綁定也被稱為“動態(tài)綁定(dynamic binding)”或“運行時綁定(run-time binding)”。
除了static和final方法(private方法隱含有final的意思),JAVA的所有的方法都采用后綁定。
產(chǎn)生正確的行為
可擴展性
錯誤:“覆寫”private的方法
抽象類和抽象方法
抽象方法(abstract method):只有聲明,沒有正文。
構(gòu)造函數(shù)與多態(tài)性
構(gòu)造函數(shù)的調(diào)用順序
復雜對象的構(gòu)造函數(shù)的調(diào)用順序尸這樣的:
1。調(diào)用基類的構(gòu)造函數(shù)。這是一個遞歸的過程,因此會先創(chuàng)建繼承體系的跟,然后是下一級派生類,依此類推,直到最后一個繼承類的構(gòu)造函數(shù)。
2。成員對象按照其聲明的順序進行初始化。
3。執(zhí)行繼承類的構(gòu)造函數(shù)的正文。
繼承與清理
先進行派生類的清理,再進行基類的清理。
多態(tài)方法在構(gòu)造函數(shù)中的行為
一個好的構(gòu)造函數(shù)應該,“用最少的工作量把對象的狀態(tài)設置好,而且要盡可能地避免去調(diào)用方法。”構(gòu)造函數(shù)唯一能安全調(diào)用的方法,就是基類的final方法 (這一條也適用private方法,因為它自動就是final的。)。他們不會被覆寫,因此也不會產(chǎn)生這種意外的行為。
用繼承來進行設計
純繼承與擴展
下傳與運行時的類型鑒別
總結(jié):多態(tài)性是一種不能孤立的看待的特性(不像switch語句),相反只有放在類關系的“大背景”下,它才有用武之地。要想在編程中有效地使用多態(tài)性,以及面向?qū)ο蟮募夹g,那你就必須擴展你的編程視野,不能只關注單個類的數(shù)據(jù)成員和消息,而是要去理解類與類之間的共同性,以及他們之間的關系。雖然這個要求很高,但是這種努力是值得的,因為它能加速程序的開發(fā),改善代碼的邏輯組織,使得程序更易于擴展,同時維護代碼也變得更方便了。
2005年03月13日 1:59 AM