class
testa
public
void
a1()
}public
class
testb
extends
testa
public
void
a1()
public
static
void
main(string args) }
現在來猜猜執行結果會是什麼?testa還是testb?x是1,10還是100?
如果你對上面幾個數字念念不忘,那麼恭喜你,你提前知道了自己錯了。正確的答案是:
x in testb is 0
下面來說說原因:
類初始化時構造函式呼叫順序:
(1)初始化物件的儲存空間為零或null值;
(2)呼叫父類建構函式;
(3)按順序分別呼叫類成員變數和例項成員變數的初始化表示式;
(4)呼叫本身建構函式。
首先new testb()例項化乙個testb的物件
(1)先給自己分配了空間,並賦初始值;
(2)由於testb繼承至testa,這裡使用的是預設的沒有引數的建構函式,它會先呼叫父類的建構函式,父類的建構函式中呼叫了a1()方法,但我們例項化的是乙個子類testb的物件,在子類中已經覆蓋了a1()方法,因此呼叫的是子類的a1()方法,這時候步驟(3)還並沒有被執行,因此x還是初始值,int的預設初始值是0;
(3)執行x=10;
(4)執行testb中的建構函式中的x=100;
我們的程式是在第(2)步中列印結果的,所以結果會是上面那樣。
乙個java小程式
能讓阿拉伯數字讀成符合漢語語法和漢語習慣的中文.就這我 還做了一天呢 鬱悶.public class itcs string unit1 new string string unit2 new string string str args 0 string str 2 null system.out...
從乙個物件例項看資料抽象與封裝
本章目標 1 用c的方式實現棧2 用c 資料抽象的方式實現棧 3 比較兩者的差異性 棧的插入用頭插法,這樣子訪問最快 不採用頭節點。c include include include 定義棧中的元素 struct link 定義乙個棧結構體 只需要頭指標 沒有頭結點 還有結構體的大小維護 struc...
有乙個Java小程式
class trangle else double getlength public double getarea else public void setabc double a,double b,double c else class lader double getarea class cir...