“Java引人注目的一項特性是代碼的重復使用或者再生。但最具革命意義的是,除代碼的復制和修改以外,我們還能做多得多的其他事情。”
在象C那樣的程序化語言裡,代碼的重復使用早已可行,但效果不是特別顯著。與Java的其他地方一樣,這個方案解決的也是與類有關的問題。我們通過創建新類來重復使用代碼,但卻用不著重新創建,可以直接使用別人已建好並調試好的現成類。
但這樣做必須保證不會干擾原有的代碼。在這一章裡,我們將介紹兩個達到這一目標的方法。第一個最簡單:在新類裡簡單地創建原有類的對象。我們把這種方法叫作“合成”,因為新類由現有類的對象合並而成。我們只是簡單地重復利用代碼的功能,而不是采用它的形式。
第二種方法則顯得稍微有些技巧。它創建一個新類,將其作為現有類的一個“類型”。我們可以原樣采取現有類的形式,並在其中加入新代碼,同時不會對現有的類產生影響。這種魔術般的行為叫作“繼承”(Inheritance),涉及的大多數工作都是由編譯器完成的。對於面向對象的程序設計,“繼承”是最重要的基礎概念之一。它對我們下一章要講述的內容會產生一些額外的影響。
對於合成與繼承這兩種方法,大多數語法和行為都是類似的(因為它們都要根據現有的類型生成新類型)。在本章,我們將深入學習這些代碼再生或者重復使用的機制。