3.8.父類和子類構(gòu)造函數(shù)

這里是關(guān)于Java構(gòu)造函數(shù)被問(wèn)到問(wèn)題的總結(jié)。

12.1 為什么創(chuàng)建一個(gè)子類對(duì)象父類的構(gòu)造函數(shù)也會(huì)被調(diào)用。

class Super {
  String s;
  public Super() {
  System.out.println("Super");
  }
}
public class Sub extends Super {
  public Sub(){
    System.out.println("Sub");
  }
  public static void main(String[] args){
    Sub s = new Sub();
  }
}
//它打?。?Super
Sub

當(dāng)從其他類繼承時(shí)候,super() 將在構(gòu)造函數(shù)中被第一個(gè)調(diào)用。如果沒(méi)有,編譯器將插入那個(gè)調(diào)用。這就是為什么當(dāng)子類對(duì)象創(chuàng)建的時(shí)候,父類對(duì)象被調(diào)用的原因。
它沒(méi)有創(chuàng)建兩個(gè)對(duì)象,僅僅是一個(gè)子類對(duì)象被創(chuàng)建。父類構(gòu)造函數(shù)被調(diào)用的原因是父類構(gòu)造函數(shù)中也許有一些私有的屬性需要通過(guò)它的構(gòu)造函數(shù)來(lái)初始化。
當(dāng)編譯插入超類的構(gòu)造函數(shù)時(shí)候,子類構(gòu)造函數(shù)看起來(lái)像下面這樣:

Public Sub() {
  Super();
  System.out.println(“sub”);
}

11.2 隱式的構(gòu)造函數(shù)沒(méi)有被默認(rèn)的構(gòu)造函數(shù)定義

這是一個(gè)被很多開發(fā)者看到的錯(cuò)誤信息:
“隱式的父類構(gòu)造函數(shù)沒(méi)有備定義默認(rèn)的構(gòu)造函數(shù),必須定義一個(gè)確定的構(gòu)造函數(shù)?!?/p>

沒(méi)定義默認(rèn)構(gòu)造函數(shù)

編譯錯(cuò)誤發(fā)生是因?yàn)槟J(rèn)的父類構(gòu)造函數(shù)沒(méi)有被定義。在java中,如果一個(gè)類沒(méi)有定義一個(gè)構(gòu)造函數(shù),編譯器將為這個(gè)類插入一個(gè)沒(méi)有參數(shù)的默認(rèn)構(gòu)造函數(shù)。
如果構(gòu)造函數(shù)在父類中被定義了,在這個(gè)例子中為super(String s),編譯器將不會(huì)插入一個(gè)默認(rèn)的無(wú)參構(gòu)造函數(shù)。這就是上面父類的情景。

在子類的構(gòu)造函數(shù)中,既有有參的構(gòu)造函數(shù),又有無(wú)參的構(gòu)造函數(shù),將調(diào)用父類無(wú)參的構(gòu)造函數(shù)。
當(dāng)編譯器試圖在兩個(gè)子類中插入super()調(diào)用兩個(gè)無(wú)參的構(gòu)造函數(shù)時(shí)候,但是父類默認(rèn)構(gòu)造函數(shù)沒(méi)有被定義,編譯器就報(bào)了這個(gè)錯(cuò)誤。
修改這個(gè)問(wèn)題,簡(jiǎn)單的
1.在父類中添加一個(gè)Super()構(gòu)造函數(shù)

Public Super() {
 System.out.println(“Super”);
}

或者
2.在父類中刪除自己定義的構(gòu)造函數(shù)。
3.在子類構(gòu)造函數(shù)中添加父類構(gòu)造函數(shù)Super(value)的調(diào)用。
下面的代碼是沒(méi)問(wèn)題的

正確代碼

子類的構(gòu)造函數(shù)明確調(diào)用了父類的有參構(gòu)造函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 構(gòu)造過(guò)程 構(gòu)造過(guò)程是使用類、結(jié)構(gòu)體或枚舉類型的實(shí)例之前的準(zhǔn)備過(guò)程。在新實(shí)例可用前必須執(zhí)行這個(gè)過(guò)程,具體操作包括設(shè)置...
    蠱毒_閱讀 780評(píng)論 0 2
  • 本章將會(huì)介紹 存儲(chǔ)屬性的初始賦值自定義構(gòu)造過(guò)程默認(rèn)構(gòu)造器值類型的構(gòu)造器代理類的繼承和構(gòu)造過(guò)程可失敗構(gòu)造器必要構(gòu)造器...
    寒橋閱讀 832評(píng)論 0 0
  • 構(gòu)造過(guò)程是使用類、結(jié)構(gòu)體或枚舉類型的實(shí)例之前的準(zhǔn)備過(guò)程。在新實(shí)例可用前必須執(zhí)行這個(gè)過(guò)程,具體操作包括設(shè)置實(shí)例中每個(gè)...
    莽原奔馬668閱讀 747評(píng)論 0 3
  • 親愛(ài)的 如果 我跟著你走 一起浪跡天涯 你會(huì)呵護(hù)著我 當(dāng)我的傘 為我遮風(fēng)擋雨嗎? 親愛(ài)的 如果你不嫌棄我的淺薄 我...
    小草_d5ad閱讀 478評(píng)論 19 43
  • 我有一好友,這家伙太能了,你看從她的名字都能看出來(lái),“能能娘”,寫作,彈吉他,唱歌等等無(wú)所不精,無(wú)所不能,而且還是...
    木蘭妮妮閱讀 240評(píng)論 2 1

友情鏈接更多精彩內(nèi)容