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