Java子類實(shí)例化總是默認(rèn)調(diào)用父類的無參構(gòu)造操作
子類實(shí)例化時(shí),默認(rèn)調(diào)用父類的無參構(gòu)造方法(不管子類的構(gòu)造器有沒有參數(shù),因?yàn)樽宇惱^承的是父類的屬性和方法,只調(diào)用父類的無參構(gòu)造器就可以繼承父類的屬性和方法,因此不會(huì)調(diào)用父類的有參構(gòu)造器),再調(diào)用子類的有參/無參構(gòu)造器。
示例:
package classTest;
class Father {
public Father(){
System.out.println("父類的無參構(gòu)造方法");
}
public Father(int a ) {
System.err.println("父類的有參構(gòu)造方法"+a);
}
}
class Son extends Father{
public Son() {
System.out.println("子類中的無參構(gòu)造方法");
}
public Son(int a ) {
System.out.println("子類中的有參構(gòu)造方法"+a);
}
}
public class TestExecute {
public static void main(String[] args) {
Son s = new Son();
System.out.println("---------------");
Son a = new Son(5);
}
}
結(jié)果:
父類的無參構(gòu)造方法
子類中的無參構(gòu)造方法
---------------
父類的無參構(gòu)造方法
子類中的有參構(gòu)造方法5
補(bǔ)充知識(shí):JAVA父類和子類的構(gòu)造函數(shù)之間的關(guān)系
我就廢話不多說了,大家還是直接看代碼吧~
class SuperClass {
private int n;
SuperClass(){ //父類的無參構(gòu)造器
System.out.println("SuperClass()");
}
SuperClass(int n) { //父類的帶參構(gòu)造器
System.out.println("SuperClass(int n)");
this.n = n;
}
}
class SubClass extends SuperClass{
private int n;
SubClass(){ //子類的無參構(gòu)造器
super(300);//調(diào)用父類的帶參構(gòu)造器,super(300)相當(dāng)于SuperClass(300)
System.out.println("SubClass");
}
public SubClass(int n){ //子類的帶參構(gòu)造器
System.out.println("SubClass(int n):"+n);
this.n = n;
}
}
public class TestSuperSub{
public static void main (String args[]){
SubClass sc = new SubClass();
SubClass sc2 = new SubClass(200);
}
}
這個(gè)實(shí)例的輸出結(jié)果是:
SuperClass(int n) SubClass SuperClass() SubClass(int n):200
從這個(gè)實(shí)例得到的結(jié)果是(個(gè)人見解):子類在構(gòu)造時(shí),會(huì)根據(jù)主函數(shù)中是否傳入?yún)?shù)來選擇使用無參構(gòu)造器 or帶參構(gòu)造器,在這個(gè)實(shí)例中:
當(dāng)子類調(diào)用的是無參構(gòu)造器時(shí),若父類的構(gòu)造器是帶有參數(shù)的,則必須在子類的構(gòu)造器中顯式地通過super關(guān)鍵字調(diào)用父類的構(gòu)造器并配以適當(dāng)?shù)膮?shù)列表。
當(dāng)子類調(diào)用的是帶參構(gòu)造器時(shí),則在子類的構(gòu)造器中用super調(diào)用父類構(gòu)造器不是必須的,如果沒有使用super關(guān)鍵字,系統(tǒng)會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造器。
以上這篇Java子類實(shí)例化總是默認(rèn)調(diào)用父類的無參構(gòu)造操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java httpClient連接池支持多線程高并發(fā)的實(shí)現(xiàn)
本文主要介紹了Java httpClient連接池支持多線程高并發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Spring?Boot集成Milvus快速入門demo示例詳解
Milvus是一種高性能向量數(shù)據(jù)庫(kù),支持從筆記本到大型分布式系統(tǒng)的多環(huán)境運(yùn)行,它以開源和云服務(wù)形式提供,是LFAI & Data Foundation的項(xiàng)目,采用Apache 2.0許可,Milvus特別支持高并行化和解耦的系統(tǒng)架構(gòu),使其能夠隨數(shù)據(jù)增長(zhǎng)而擴(kuò)展,支持各種復(fù)雜搜索功能,滿足企業(yè)級(jí)AI應(yīng)用需求2024-09-09
Java程序開發(fā)中abstract 和 interface的區(qū)別詳解
abstract class和interface在Java語(yǔ)言中都是用來進(jìn)行抽象類。但是兩者有什么區(qū)別呢,接下來小編給大家?guī)砹薬bstract 和 interface的區(qū)別詳解,感興趣的朋友一起學(xué)習(xí)吧2016-06-06
SpringBoot從yml配置文件中讀常用參數(shù)值實(shí)例方法
在本篇文章里小編給大家整理了關(guān)于SpringBoot從yml配置文件中讀常用參數(shù)值實(shí)例方法,有需要的朋友們學(xué)習(xí)下。2019-12-12
淺談SpringBoot 中關(guān)于自定義異常處理的套路
這篇文章主要介紹了淺談SpringBoot 中關(guān)于自定義異常處理的套路,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
項(xiàng)目依賴Springboot jar失敗解決方案
這篇文章主要介紹了項(xiàng)目依賴Springboot jar失敗解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

