Java實(shí)現(xiàn)子類自動(dòng)調(diào)用父類無參構(gòu)造函數(shù)
Java子類自動(dòng)調(diào)用父類無參構(gòu)造函數(shù)
今天在刷題的時(shí)候看到一道題
public class A {
public A() {//父類A的無參構(gòu)造函數(shù)
System.out.println("A");
}
}
public class B extends A{
public B() {//子類B的無參構(gòu)造函數(shù)
System.out.println("B");
}
}
public class TestAB {
public static void main(String[] args) {
A a = new A();//創(chuàng)建一個(gè)A類對(duì)象
B b = new B();//創(chuàng)建一個(gè)B類對(duì)象
}
}
問題是輸出的結(jié)果是什么,我下意識(shí)覺得太簡(jiǎn)單了,這不就是AB嘛,創(chuàng)建一個(gè)A類對(duì)象時(shí)去調(diào)用A的無參構(gòu)造函數(shù),輸出A;
創(chuàng)建一個(gè)B類對(duì)象時(shí)去調(diào)用B的無參構(gòu)造函數(shù),由于我下意識(shí)地認(rèn)為子類B的無參構(gòu)造函數(shù)沒有super(),我就認(rèn)為它不會(huì)去調(diào)用父類A的無參構(gòu)造函數(shù),所以我的結(jié)果是B。
當(dāng)然我錯(cuò)了,結(jié)果是AAB。

下面的例子可以說明這個(gè)問題
public class A {
public A(int a) {
System.out.println("A");
}
}
public class B extends A{
public B() {
System.out.println("B");
}
}
public class TestAB {
public static void main(String[] args) {
A a = new A(1);
B b = new B();
}
}
結(jié)果是:

原因就是在去創(chuàng)建子類對(duì)象時(shí)
它自動(dòng)去調(diào)用父類的無參構(gòu)造函數(shù),由于A類只有一個(gè)有參構(gòu)造函數(shù),所以沒有找到,編譯錯(cuò)誤。
當(dāng)我們?cè)谧宇愔惺褂胹uper(XXX),去調(diào)用父類有參構(gòu)造函數(shù)就可以解決。
代碼如下:
public class B extends A{
public B() {
super(1);
System.out.println("B");
}
}
從這里我們還應(yīng)該能看出,當(dāng)我們?cè)谝粋€(gè)類中定義了自己的帶參數(shù)的構(gòu)造方法的時(shí)候,必須把無參構(gòu)造函數(shù)定義一下。
用我們老師的話來說就是:不管什么時(shí)候,不管能不能用到,先把無參構(gòu)造函數(shù)寫出來,避免出錯(cuò)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java創(chuàng)建線程三種方式的優(yōu)缺點(diǎn)
今天小編就為大家分享一篇關(guān)于Java創(chuàng)建線程三種方式的優(yōu)缺點(diǎn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
利用靜態(tài)方法獲取spring的bean實(shí)例
文章介紹了如何在Spring框架中通過工具類的靜態(tài)方法獲取Spring命名空間中的bean,思路包括定義bean并實(shí)現(xiàn)ApplicationContextAware接口,然后在代碼中執(zhí)行特定代碼獲取bean,擴(kuò)展部分詳細(xì)講解了加載原理和注意事項(xiàng)2025-11-11
SpringBoot與SpringCloud的版本對(duì)應(yīng)關(guān)系解讀
本文介紹了SpringBoot與SpringCloud的版本對(duì)應(yīng)關(guān)系,提供了一個(gè)官方的版本對(duì)應(yīng)表,并給出了個(gè)人的一些經(jīng)驗(yàn)總結(jié)2024-12-12
Collections工具類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Collections工具類提供了大量針對(duì)Collection/Map的操作。這篇文章主要介紹了Collections工具類_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-04-04
SpringBoot實(shí)現(xiàn)文件下載功能的方式分享
這篇文章主要為大家詳細(xì)介紹了SpringBoot這哪個(gè)實(shí)現(xiàn)文件下載功能的幾種方式,文中的實(shí)現(xiàn)方法簡(jiǎn)介易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
SpringBoot應(yīng)用部署于外置Tomcat容器的方法
這篇文章主要介紹了SpringBoot應(yīng)用部署于外置Tomcat容器的方法,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
java使用JDBC連接數(shù)據(jù)庫的五種方式(IDEA版)
這篇文章主要介紹了java使用JDBC連接數(shù)據(jù)庫的五種方式(IDEA版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

