繼承與Java(以及其他OOP語言)非常緊密地結合在一起。我們早在第1章就為大家引入了繼承的概念,並在那章之後到本章之前的各章裡不時用到,因為一些
由於這兒涉及到兩個類——基礎類及衍生類,而不再是以前的一個,所以在想象衍生類的結果對象時,可能會產生一些迷惑。從外部看,似
許多時候都要求將合成與繼承兩種技術結合起來使用。下面這個例子展示了如何同時采用繼承與合成技術,從而創建一個更復雜的類,同時進行必要的構建器初始化工
Java不具備象C++的“破壞器”那樣的概念。在C++中,一旦破壞(清除)一個對象,就會自動調用破壞器方法。之所以將其省略
只有C++程序員可能才會驚訝於名字的隱藏,因為它的工作原理與在C++裡是完全不同的。如果Java基礎類有一個方法名被“過載&rdquo
無論合成還是繼承,都允許我們將子對象置於自己的新類中。大家或許會奇怪兩者間的差異,以及到底該如何選擇。如果想利用新類內部一個現有類的特性,而不想使
現在我們已理解了繼承的概念,protected這個關鍵字最後終於有了意義。在理想情況下,private成員隨時都是“私有”
繼承的一個好處是它支持“累積開發”,允許我們引入新的代碼,同時不會為現有代碼造成錯誤。這樣可將新錯誤隔離到新代碼裡。通過從
繼承最值得注意的地方就是它沒有為新類提供方法。繼承是對新類和基礎類之間的關系的一種表達。可這樣總結該關系:“新類屬於現有類的一種類型&
之所以叫作這個名字,除了有一定的歷史原因外,也是由於在傳統意義上,類繼承圖的畫法是根位於最頂部,再逐漸向下擴展(當然,可根據自己的習慣用任何方法描
許多程序設計語言都有自己的辦法告訴編譯器某個數據是“常數”。常數主要應用於下述兩個方面:(1) 編譯期常數,它永遠不會改變
之所以要使用final方法,可能是出於對兩方面理由的考慮。第一個是為方法“上鎖”,防止任何繼承類改變它的本來含義。設計程序
如果說整個類都是final(在它的定義前冠以final關鍵字),就表明自己不希望從這個類繼承,或者不允許其他任何人采取這種操作。換言之,出於這樣或
設計一個類時,往往需要考慮是否將一個方法設為final。可能會覺得使用自己的類時執行效率非常重要,沒有人想覆蓋自己的方法。這種想法在某些時候是正確
(1) 創建一個myString類,在其中包含了一個String對象,以便用在構建器中用構建器的自變量對其進行初始化。添加一個toString()
在許多傳統語言裡,程序都是作為啟動過程的一部分一次性載入的。隨後進行的是初始化,再是正式執行程序。在這些語言中,必須對初始化過程進行慎重的控制,保
我們有必要對整個初始化過程有所認識,其中包括繼承,對這個過程中發生的事情有一個整體性的概念。請觀察下述代碼: //: Beetle.ja
無論繼承還是合成,我們都可以在現有類型的基礎上創建一個新類型。但在典型情況下,我們通過合成來實現現有類型的“再生”或&ld
“對於面向對象的程序設計語言,多型性是第三種最基本的特征(前兩種是數據抽象和繼承。”“多形性”(P
在第6章,大家已知道可將一個對象作為它自己的類型使用,或者作為它的基礎類型的一個對象使用。取得一個對象句柄,並將其作為基礎類型句柄使用的行為就叫作