派生類 與基類的關係:
(1)建立建構函式的順序 :基類建構函式(注意此處基類的成員不能初始化) ==>派生類成員初始化 ==>派生類建構函式
(2)派生類的建構函式 中 基類的建構函式預設在第一條,如果不寫super(),則預設在第一條,注意位置不能顛倒
(3)派生類可以繼承全部的基類的建構函式
阿里筆試題 舉個栗子:
1package
com.test;23
public
class
dispatchtest
1112
static
class
base
2021
public
void
printmessage()
2425}26
27static
class sub extends
base
3637
public
void
printmessage()
40}
4142 }
結果列印為:
sub.x=0sub.x=3020
如上分析可以看出 第八行開始初始化 派生類sub的建構函式,按照剛才的順序
首先初始化基類的建構函式(不包含基類成員)因此
(1)基類的建構函式==>執行 17行,this.printmessage();注意此處的this是派生類,並且派生類的成員還沒有初始化,因此x=0;
列印 sub.x=0
(2)執行18行,基類的x =20
(3)派生類的成員==>執行29行 x=30;
(4)派生類建構函式==>執行32行;列印 sub.x=30;
(5)然後執行9行,注意,此處的sub屬於派生類,包含了兩類例項 基類 base b 和 sub b,
因為第7行強制轉化為基類,因此 b.x =20(基類的) 列印 20;
如果第7行為sub b,則b.x=40(派生類) 列印 40;
綜上 結果:
sub.x=0sub.x=3020
參考:
派生類建構函式 建立順序 阿里筆試題
派生類 與基類的關係 1 建立建構函式的順序 基類建構函式 注意此處基類的成員不能初始化 派生類成員初始化 派生類建構函式 2 派生類的建構函式 中 基類的建構函式預設在第一條,如果不寫super 則預設在第一條,注意位置不能顛倒 3 派生類可以繼承全部的基類的建構函式 阿里筆試題 舉個栗子 1 p...
派生類建構函式
1 建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。像任何類一樣,如果類不定義自己的預設建構函式和複製控制成員,就將使用合成版本。2 派生類的合成預設建構函式除了初始化派生類的資料成員之外,它還初始化派生類物件的基類部分。基類部分由基類的預設建構函式初始化。3 派生類建構函式...
派生類 建構函式
在hpp標頭檔案中,宣告建構函式中,必須為新增的資料成員和基類的資料成員提供資料,即每乙個形參代表乙個成員 派生類宣告建構函式入下,其中r是給新增的資料,後面是基類的成員。在cpp檔案定義的時候,必須建立基類的物件,即如果不是預設的物件,則必須顯示的建立基類的物件,將資料傳遞給基類的物件 如下圖 t...