Think inJava學(xué)習(xí)筆記 第七章 復(fù)用類

當(dāng)創(chuàng)建了一個導(dǎo)出類的對象時,該對象包含了一個基類的子對象凶朗。這個子對象與你用基類直接創(chuàng)建的對象是一樣的苹祟。二者的區(qū)別在于,后者來自外部刑桑,而基類的子對象被包裝在導(dǎo)出類對象內(nèi)部。
當(dāng)然漓概,對基類子對象的正確初始化也是至關(guān)重要的漾月,而且也僅有一種方法來保證這一點:在構(gòu)造器中調(diào)用基類構(gòu)造器來執(zhí)行初始化,而基類構(gòu)造器中具有執(zhí)行基類初始化所需要的所有知識和能力胃珍。Java自動在導(dǎo)出類的構(gòu)造器中插入對基類構(gòu)造器的調(diào)用梁肿。

因為子類構(gòu)造器在執(zhí)行的時候會依次遞歸把其父類的構(gòu)造器都執(zhí)行一遍,所以我們可以在子類中獲取父類的方法觅彰、屬性吩蔑。有時候我們使用super,這個super指代的就是父類的對象填抬。
當(dāng)然也有不能自動執(zhí)行父類構(gòu)造器的時候:

class A {
    A(int a) { 
    }
}

class B extends A{
}

如上述代碼所示烛芬,A類有一個含參數(shù)的構(gòu)造器,這個構(gòu)造器會替代原有的默認(rèn)構(gòu)造器飒责。所以B類就不能夠使用默認(rèn)構(gòu)造器了赘娄,必須手動調(diào)用A的參數(shù)構(gòu)造器。因為B類要調(diào)用A的構(gòu)造器宏蛉,但是A只有一個含參數(shù)的構(gòu)造器遣臼,這個時候B不知道怎么向A的構(gòu)造器傳遞參數(shù)。所以編譯器會報如下錯誤警告:

Implicit super constructor A() is undefined for default constructor. Must define an explicit constructor

這個時候就需要我們手動為A類傳入?yún)?shù)就行啦拾并。

class A {
    A(int a) { 
    }
}

class B extends A{
    B() {
        super(1);
    }
}

雖然編譯器強制你去初始化基類揍堰,并且要求你要在構(gòu)造器起始處就這么做,但是它并不監(jiān)督你必須將成員對象也初始化嗅义,因此在這一點上你自己必須時刻注意屏歹。

成員對象會在我們創(chuàng)建該類的對象的時候賦予一個值為“0”的初始值,所以我們不用擔(dān)心類似于空指針的異常之碗。而如果不先初始化父類的話蝙眶,就不能夠調(diào)用父類的方法和變量了。

如果Java基類擁有某個已經(jīng)被多次重載的方法名稱褪那,那么在導(dǎo)出類中重新定義該方法名稱并不會屏蔽其在基類中的任何版本械馆。

正如之前所提到的胖眷,一個方法是由其方法名和參數(shù)列表所決定的,子類中如果出現(xiàn)了與父類方法名或者形參列表不同的方法霹崎,那這就是子類獨有的方法珊搀,和父類的方法沒有任何關(guān)系,也就不會覆蓋掉父類的方法尾菇。

Java允許生成“空白final”境析,所謂空白final是指被聲明為final但又未給定初始值的參數(shù)。無論什么情況下派诬,編譯器確崩拖空白final在使用前都必須被初始化。但是空白final在關(guān)鍵字final上提供了更大的靈活性默赂。

final關(guān)鍵字在使用前必須被初始化沛鸵,那么我們可以在構(gòu)造器、初始化塊中對其初始化缆八。

類中所有的private方法都隱式的指定為final曲掰。由于無法使用private方法,所以也就愛無法覆蓋它奈辰。

我們知道final修飾一個方法是為了讓它不被子類重寫栏妖。如果我們在子類中創(chuàng)建一個方法名和形參列表都和父類方法一致的方法的話,編譯器就會報錯奖恰。但是如果使用private而不是final修飾父類方法的話吊趾,子類則不會報錯。

class A {
    A(int a) {
    }
    
    private final void test() {
    }
}

class B extends A{
    B() {
        super(1);
    }

    void test(int i){
    }
}

因為這個時候在子類看來瑟啃,父類并沒有同名的方法论泛,父類中的private方法對子類是不可見的。舉個例子蛹屿,公司A發(fā)明了一個新配方孵奶,但是不想申請專利,因為專利年限就幾十年蜡峰,公司A認(rèn)為這個配方能帶來幾百年的利益。然后公司B后來也發(fā)明了這個相似的配方朗恳,公司A就不能禁止公司B使用這個配方了湿颅,因為B完全是自己發(fā)明的,和A一點關(guān)系都沒有的粥诫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末油航,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怀浆,更是在濱河造成了極大的恐慌谊囚,老刑警劉巖怕享,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異镰踏,居然都是意外死亡函筋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門奠伪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跌帐,“玉大人,你說我怎么就攤上這事绊率〗髁玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵滤否,是天一觀的道長脸狸。 經(jīng)常有香客問我,道長藐俺,這世上最難降的妖魔是什么炊甲? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮紊搪,結(jié)果婚禮上蜜葱,老公的妹妹穿的比我還像新娘。我一直安慰自己耀石,他們只是感情好牵囤,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滞伟,像睡著了一般揭鳞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梆奈,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天野崇,我揣著相機與錄音,去河邊找鬼亩钟。 笑死乓梨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的清酥。 我是一名探鬼主播扶镀,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼焰轻!你這毒婦竟也來了臭觉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝠筑,沒想到半個月后狞膘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡什乙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年挽封,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稳强。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡场仲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出退疫,到底是詐尸還是另有隱情渠缕,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布褒繁,位于F島的核電站亦鳞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棒坏。R本人自食惡果不足惜燕差,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坝冕。 院中可真熱鬧徒探,春花似錦、人聲如沸喂窟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磨澡。三九已至碗啄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稳摄,已是汗流浹背稚字。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厦酬,地道東北人胆描。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像仗阅,于是被迫代替她去往敵國和親昌讲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355