第七章 復(fù)用類
繼承
一逢唤、 繼承有一個通用的規(guī)則是:將所有的數(shù)據(jù)成員都指定為private,將所有的方法指定為public涤浇。
二鳖藕、 在發(fā)生繼承的情況下,初始化順序是先初始化父類只锭,在初始化子類著恩。具體的初始化過程順序如下:
- 先根據(jù)繼承關(guān)系依次初始化父類
- 再初始化成員變量
- 在執(zhí)行當(dāng)前類的構(gòu)造器內(nèi)內(nèi)容
- 執(zhí)行main方法
** 繼承是典型的("is-a")關(guān)系。**
組合
將某個類作為另一個類的引用既是組合蜻展,組合是復(fù)用的基本手段之一喉誊。
組合通常用于想在新類中使用現(xiàn)有類的功能而并非是他的接口這種情況。即纵顾,在新類中嵌入某個對象伍茄,讓其實現(xiàn)所需要的功能,但新類的用戶看到的只能是為新類所定義的接口施逾,而非所嵌入對象的接口敷矫。
** 組合是典型的("has-a")關(guān)系。**
繼承和組合都允許在新類中放置子對象汉额,區(qū)別是組合是顯示的做曹仗,而繼承則是隱式的做。
代理
從語法層面來講闷愤,代理是組合和繼承的中庸之道整葡,結(jié)合繼承和組合一起使用。但個人認(rèn)為代理就是組合的一種特殊情況讥脐,代理可以靈活的選擇在新類中提供的方法是成員對象中的方法的某個子集遭居。
final關(guān)鍵字
final可作用于數(shù)據(jù)啼器、方法和類三種情況。通常final是代表無法改變的俱萍。
- final作用于屬性時端壳,表示該屬性是常量,初始化之后不可改變枪蘑。但并不是在聲明是必須初始化损谦,Java允許空final的出現(xiàn),即只聲明變量而不初始化岳颇。另外照捡,final作用于基本屬性是表示屬性的值不可變,而作用于對象等引用類型時表示當(dāng)前引用不可變话侧,例如final作用于數(shù)組則表示改變量指向數(shù)組的引用不可變栗精,但數(shù)組內(nèi)的元素是可變的。
- final作用于方法時瞻鹏,表示當(dāng)前方法不可被重寫悲立,即在繼承時不會被覆蓋。另外所有private方法都隱式指定了final關(guān)鍵字新博。
- final作用于類時薪夕,表示當(dāng)前類不可以被繼承,由于final類禁止繼承赫悄,所以final類中方法都隱式指定為了final的原献。
第八章 多態(tài)
多態(tài)通過分離做什么和怎么做,從另一角度將接口和實現(xiàn)分離開來涩蜘。
將一個方法調(diào)用同一個方法主體關(guān)聯(lián)起來被稱為綁定嚼贡,如果在程序運行前綁定,則稱之為前期綁定同诫,如果在運行時根據(jù)對象類型進行綁定則稱之為運行時綁定粤策、動態(tài)綁定或后期綁定。Java中除了static方法和final方法是前期綁定之外误窖,其他均為后期綁定叮盘。
多態(tài)是一項將改變的事物與未來的事物分離開來的重要技術(shù)。
第九章 接口
策略模式
創(chuàng)建一個能夠根據(jù)所傳遞的參數(shù)對象的不同而具有不同行為的方法霹俺,被稱之為策略模式柔吼。這類方法包含所要執(zhí)行的算法中固定不變的部分,而“策略”包含變化的部分丙唧。策略就是傳遞進去的參數(shù)對象愈魏,它包含要執(zhí)行的代碼,一般的,策略對象通常使用接口+多態(tài)來實現(xiàn)不同策略培漏。
適配器模式
如果碰到無法修改需要使用的類的情況溪厘,可以使用適配器模式。適配器中的代碼通過接受所擁有的接口牌柄,產(chǎn)生所需要的接口畸悬。其核心思想是通過對所擁有接口的代理或組合,產(chǎn)生適配當(dāng)前情況的新的接口珊佣。