Java實(shí)現(xiàn)子類自動(dòng)調(diào)用父類無(wú)參構(gòu)造函數(shù)
Java子類自動(dòng)調(diào)用父類無(wú)參構(gòu)造函數(shù)
今天在刷題的時(shí)候看到一道題
public class A {
public A() {//父類A的無(wú)參構(gòu)造函數(shù)
System.out.println("A");
}
}
public class B extends A{
public B() {//子類B的無(wú)參構(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的無(wú)參構(gòu)造函數(shù),輸出A;
創(chuàng)建一個(gè)B類對(duì)象時(shí)去調(diào)用B的無(wú)參構(gòu)造函數(shù),由于我下意識(shí)地認(rèn)為子類B的無(wú)參構(gòu)造函數(shù)沒有super(),我就認(rèn)為它不會(huì)去調(diào)用父類A的無(wú)參構(gòu)造函數(shù),所以我的結(jié)果是B。
當(dāng)然我錯(cuò)了,結(jié)果是AAB。

下面的例子可以說(shuō)明這個(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)用父類的無(wú)參構(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í)候,必須把無(wú)參構(gòu)造函數(shù)定義一下。
用我們老師的話來(lái)說(shuō)就是:不管什么時(shí)候,不管能不能用到,先把無(wú)參構(gòu)造函數(shù)寫出來(lái),避免出錯(cuò)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring AI內(nèi)置DeepSeek的詳細(xì)步驟
Spring AI 最新快照版已經(jīng)內(nèi)置 DeepSeek 了,所以以后項(xiàng)目中對(duì)接 DeepSeek 就方便多了,但因?yàn)榭煺瞻鏁?huì)有很多 Bug,所以今天咱們就來(lái)看穩(wěn)定版的 Spring AI 如何對(duì)接 DeepSeek 滿血版,感興趣的小伙伴跟著小編一起來(lái)看看吧2025-02-02
SpringBoot實(shí)現(xiàn)文件上傳下載功能小結(jié)
最近做的一個(gè)項(xiàng)目涉及到文件上傳與下載功能。SpringBoot后臺(tái)如何實(shí)現(xiàn)文件上傳下載呢?下面有單文件上傳和多文件上傳功能,感興趣的朋友一起看看吧2017-08-08
解析Orika的MapperFacade 屬性賦值的使用問題
在我們實(shí)際開發(fā)中,常常會(huì)有對(duì)象與對(duì)象之間的轉(zhuǎn)化,或者把一個(gè)對(duì)象的數(shù)據(jù)轉(zhuǎn)化到另一個(gè)數(shù)據(jù)之中,如果我們手動(dòng)的一個(gè)一個(gè)的set就會(huì)比較麻煩,代碼段看起來(lái)也會(huì)比較長(zhǎng)。而Orika的MapperFacade就是解決這個(gè)問題的,實(shí)現(xiàn)對(duì)象屬性的復(fù)制2021-12-12
Mybatis原始執(zhí)行方式Executor代碼實(shí)例
這篇文章主要介紹了Mybatis原始執(zhí)行方式Executor代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
IDEA實(shí)現(xiàn)純java項(xiàng)目并打包jar的步驟(不使用Maven,Spring)
在Java開發(fā)中我們通常會(huì)將我們的項(xiàng)目打包成可執(zhí)行的Jar包,以便于在其他環(huán)境中部署和運(yùn)行,這篇文章主要介紹了IDEA實(shí)現(xiàn)純java項(xiàng)目并打包jar(不使用Maven,Spring)的相關(guān)資料,需要的朋友可以參考下2025-08-08
spring boot對(duì)IP地址設(shè)置黑白名單的項(xiàng)目實(shí)踐
本文主要介紹了spring boot對(duì)IP地址設(shè)置黑白名單的項(xiàng)目實(shí)踐,通過(guò)YML配置文件定義過(guò)濾器類并注冊(cè)FilterConfig來(lái)實(shí)現(xiàn)訪問控制,具有一定的參考價(jià)值,感興趣的可以了解一下2025-07-07

