我們有必要對整個初始化過程有所認識,其中包括繼承,對這個過程中發生的事情有一個整體性的概念。請觀察下述代碼: //: Beetle.java// The full process of initialization.class Insect { int i = 9; int j; Insect() { prt("i = " + i + ", j = " + j); j = 39; } static int x1 =
如果說整個類都是final(在它的定義前冠以final關鍵字),就表明自己不希望從這個類繼承,或者不允許其他任何人採取這種操作。換言之,出於這樣或那樣的原因,我們的類肯定不需要進行任何改變;或者出於安全方面的理由,我們不希望進行子類化(子類處理)。除此以外,我們或許還考慮到執行效率的問題,並想確保涉及這個類各對象的所有行動都要儘可能地有效。如下所示: //: Jurassic.java// Making an entire class finalclass SmallBrain
許多程式設計語言都有自己的辦法告訴編譯器某個資料是“常數”。常數主要應用於下述兩個方面:(1) 編譯期常數,它永遠不會改變(2) 在運行期初始化的一個值,我們不希望它發生變化對於編譯期的常數,編譯器(程式)可將常數值“封裝”到需要的計算過程裡。也就是說,計算可在編譯期間提前執行,從而節省運行時的一些開銷。在Java中,這些形式的常數必須屬於基礎資料型別 (Elementary Data
只有C++程式員可能才會驚訝於名字的隱藏,因為它的工作原理與在C++裡是完全不同的。如果Java基礎類有一個方法名被“過載”使用多次,在衍生類裡對那個方法名的重新定義就不會隱藏任何基礎類的版本。所以無論方法在這一級還是在一個基礎類中定義,過載都會生效: //: Hide.java// Overloading a base-class method name// in a derived class does not hide the// base-class
就以前的學習情況來看,事實上已進行了多次“合成”操作。為進行合成,我們只需在新類裡簡單地置入物件控點即可。舉個例子來說,假定需要在一個對象裡容納幾個String對象、兩種基礎資料型別 (Elementary Data Type)以及屬於另一個類的一個對象。對於非基本類型的對象來說,只需將控制代碼置於新類即可;而對於基礎資料型別 (Elementary Data
在Java中,亦可用訪問指示符判斷出一個庫內的哪些類可由那個庫的使用者使用。若想一個類能由客戶程式員調用,可在類主體的起始花括弧前面某處放置一個public關鍵字。它控制著客戶程式員是否能夠建立屬於這個類的一個對象。為控制一個類的訪問,指示符必須在關鍵字class之前出現。所以我們能夠使用:public class Widget {也就是說,假若我們的庫名是mylib,那麼所有客戶程式員都能訪問Widget——通過下述語句:import
由於置入一個介面的所有欄位都自動具有static和final屬性,所以介面是對常數值進行分組的一個好工具,它具有與C或C++的enum非常相似的效果。如下例所示: //: Months.java// Using interfaces to create groups of constantspackage c07;public interface Months { int JANUARY = 1, FEBRUARY = 2, MARCH = 3, APRIL = 4,