面試的時候遇到了這樣乙個問題:
class
apublica(
)publica(
int n)
}class
bextends
apublicb(
)publicb(
int n)
}public
class
classload
}
如上**,當呼叫了子類b的有參構造時,父類的構造器先執行肯定是確定無疑,但是是執行哪個構造器呢?
執行結果如下:
執行結果中可以看到,當呼叫了子類b的有參構造時,父類a依然是執行了無參構造
,也就是說,如果子類構造器中未顯式指定父類構造器,那麼將會預設執行父類的無參構造,此時,如果你過載了乙個父類的有參構造而沒有指定無參構造,那麼編譯將不會通過!!
父類的靜態字段——>父類靜態**塊——>子類靜態字段——>子類靜態**塊——>父類成員變數(非靜態字段)——>父類非靜態**塊——>父類(無參
)構造器——>子類成員變數——>子類非靜態**塊——>子類構造器
class
apublica(
)}public
class
bextends
apublic
static
void
main
(string[
] args)
}答案:astaticab
classa1}
public
class
b1extends
a1public
static
void
main
(string[
] args)
}答案:astaticab
class
a2private
static a2 a =
newa2()
;static
}public
class
b2extends
a2public
static
void
main
(string[
] args)
}答案:
a1a gouzhaostatic0000
a1a gouzhaob
main方法是乙個特殊的方法,在程式開始執行時,系統會找到main方法所在的那個class檔案,然後把main方法的自**裝入記憶體,裝入的過程其實就是初識化這個類的過程,初識化成員變數,初始化static變數,初始化static塊,載入這個類(初始化)過程中如果不在執行的方法中new物件的話是不會執行其對應的構造方法和構造塊的,但是這個題在初始化成員變數時就new物件了所以執行結果為那樣。
在main方法中執行new b2時又去
執行了父類a2的構造**塊和無參
構造方法。 day10作業常用類
一 基礎案例 1 訓練案例1 1.1 訓練描述 陣列排序 一 需求說明 定義乙個陣列,陣列中元素為 將陣列中的元素按照從小到大的順序進行排序。1.2 操作步驟描述 1.建立乙個一維陣列,陣列內容為。2.對陣列中元素按照從小到大的順序進行排序。3.將排完序的陣列進行列印。public class te...
python入門day10(迴圈 類)
一 我們先觀察下面兩幅圖的 看看他們之間有什麼不同之處,有什麼相似之處。經過仔細的觀察,我們可以發現,兩幅圖的差別就在於是否含有eval 函式,含有eval 函式的 會將我們輸入的數字變成數字直接進行計算 不含有eval 的 在做二者求和的時候只是簡單的將兩個字串進行了拼接,並不能完成我們預期的相加...
python的類與物件(day10)
定義類 class classname 類的幫助資訊 statement 在定義類時,如果沒有想好類的功能時,可用pass語句代替。建立類的例項 classname parameterlist classname 為必選引數,用於指定具體的類。後者為可選引數。init 該方法必須包含乙個self引數...