今天繼續(xù)讀《java 編程思想》蓖捶,讀到了復用類一章凝化,看到總結(jié)寫的很好,現(xiàn)貼上來官辽,給大家分享炕贵。
繼承和組合都能從現(xiàn)有類型生成新類型。組合一般是將現(xiàn)有類型作為新類型底層實現(xiàn)的一部分來加以復用野崇,而繼承復用的是接口称开。
在使用繼承時,由于導出類具有基類接口乓梨,因此它可以向上轉(zhuǎn)型至基類鳖轰,這對多態(tài)來講至關重要。
盡管面向?qū)ο缶幊虒^承極力強調(diào)扶镀,但在開始一個設計時蕴侣,一般應優(yōu)先考慮使用組合(或者可能是代理),只在確實必要時才使用繼承臭觉。因為組合更具靈活性昆雀。此外,通過對成員類型使用繼承技術的添加技巧蝠筑,可以在運行時改變那些成員對象的類型和行為狞膘。因此,可以在運行時改變組合而成的對象的行為什乙。
在設計一個系統(tǒng)時挽封,目標應該是找到或創(chuàng)建某些類,其中每個類都有具體的用途臣镣,而且既不會太大(包含太多的功能而難以復用)辅愿,也不會太小(不添加其它功能就無法使用)忆某。如果你的設計變得過于復雜点待,通過將現(xiàn)有類拆分為更小的部分或添加更多的對象,通常會有所幫助弃舒。
當你開始設計一個系統(tǒng)時癞埠,應該認識到程序開發(fā)是一種增量過程,猶如人類的學習一樣,這一點很重要燕差。程序開發(fā)依賴于實驗,你可以盡己所能去分析坝冕,但當你開始執(zhí)行一個項目時徒探,你仍然無法知道所有的答案。如果將項目視作是一種有機的喂窟、進化著的生命體而去培養(yǎng)测暗,而不是打算像蓋摩天大樓一樣快速見效,就會獲得更多的成功和更迅速的回饋磨澡。繼承和組合正是在面向?qū)ο蟪绦蛟O計中使得你可以執(zhí)行這種實驗的最基本的兩個工具碗啄。