詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用
詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用
在Java中創(chuàng)建一個(gè)類的對(duì)象時(shí),如果該類存在父類,則先調(diào)用父類的構(gòu)造方法,然后再調(diào)用子類的構(gòu)造方法。如果父類沒(méi)有定義構(gòu)造方法,則調(diào)用編譯器自動(dòng)創(chuàng)建的不帶參數(shù)的默認(rèn)構(gòu)造方法。如果父類定義了public的無(wú)參的構(gòu)造方法,則在調(diào)用子類的構(gòu)造方法前會(huì)自動(dòng)先調(diào)用該無(wú)參的構(gòu)造方法。如果父類只有有參的構(gòu)造方法,沒(méi)有無(wú)參的構(gòu)造方法,則子類必須在構(gòu)造方法中必須顯式調(diào)用super(參數(shù)列表)來(lái)指定某個(gè)有參的構(gòu)造方法。如果父類定義有無(wú)參的構(gòu)造方法,但無(wú)參的構(gòu)造方法聲明為private,則子類同樣必須在構(gòu)造方法中必須顯式調(diào)用super(參數(shù)列表)來(lái)指定某個(gè)有參的構(gòu)造方法。如果父類沒(méi)有其他的有參構(gòu)造方法,則子類無(wú)法創(chuàng)建。
| 有父類 | 子類 | ||
|---|---|---|---|
| Public無(wú)參構(gòu)造方法 | Private無(wú)參構(gòu)造方法 | 有參構(gòu)造方法 | |
| 無(wú) | 無(wú) | 無(wú) | 所有構(gòu)造方法都會(huì)調(diào)用父類的默認(rèn)構(gòu)造方法 |
| 有 | 無(wú) | 無(wú) | 所有構(gòu)造方法都會(huì)調(diào)用定義的無(wú)參構(gòu)造方法 |
| 無(wú) | 無(wú) | 有 | 所有構(gòu)造方法都必須指定調(diào)用某個(gè)有參的構(gòu)造方法,或通過(guò)this調(diào)用某個(gè)其他的構(gòu)造方法。 |
| 有 | 無(wú) | 有 | 可以指定調(diào)用某個(gè)構(gòu)造方法,如果沒(méi)有指定,則調(diào)用無(wú)參構(gòu)造方法。 |
| 無(wú) | 有 | 無(wú) | 子類無(wú)法構(gòu)造(父類無(wú)法派生子類) |
| 無(wú) | 有 | 有 | 所有構(gòu)造方法都必須指定調(diào)用某個(gè)有參的構(gòu)造方法,或通過(guò)this調(diào)用某個(gè)其他的構(gòu)造方法。 |
例如:
class Parent {
private String pString;
Parent(){
pString = "p1";
}
}
class Child extends Parent {
private String cString;
Child() {
cString = "c1";
}
}
當(dāng)Child對(duì)象創(chuàng)建時(shí),會(huì)先調(diào)用父類Parent的構(gòu)造方法將pString初始化為”p1”,然后再調(diào)用Child的構(gòu)造方法,將cString初始化為”c1”。
class Parent {
private String pString;
private Parent(){
pString = "p1";
}
Parent(String s){
pString = "p2";
}
}
class Child extends Parent {
private String cString;
Child() {
super("");
cString = "c1";
}
}
由于父類定義了private的無(wú)參構(gòu)造方法,因此,在子類中必須顯式指定調(diào)用某個(gè)有參的構(gòu)造方法。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果深入分析
這篇文章主要介紹了SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12
Java Web開發(fā)防止多用戶重復(fù)登錄的完美解決方案
在web項(xiàng)目開發(fā)中,很多情況下都可以讓同一個(gè)賬號(hào)信息在不同的登錄入口登錄很多次,這樣子做的不是很完善。一般解決這種情況有兩種解決方案,小編呢主要以第二種方式給大家介紹具體的實(shí)現(xiàn)方法,對(duì)java web 防止多用戶重復(fù)登錄的解決方案感興趣的朋友一起看看吧2016-11-11
SpringBoot使用自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏過(guò)程詳細(xì)解析
這篇文章主要介紹了SpringBoot自定義注解之脫敏注解詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Java中System.currentTimeMillis()計(jì)算方式與時(shí)間單位轉(zhuǎn)換講解
本文詳細(xì)講解了Java中System.currentTimeMillis()計(jì)算方式與時(shí)間單位轉(zhuǎn)換,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Java使用wait/notify實(shí)現(xiàn)線程間通信上篇
wait()和notify()是直接隸屬于Object類,也就是說(shuō)所有對(duì)象都擁有這一對(duì)方法,下面這篇文章主要給大家介紹了關(guān)于使用wait/notify實(shí)現(xiàn)線程間通信的相關(guān)資料,需要的朋友可以參考下2022-12-12
AndroidStudio無(wú)法新建Java工程的簡(jiǎn)單解決辦法
AS創(chuàng)建java工程是非常麻煩的,AS沒(méi)有提供直接創(chuàng)建java工程的方法且常常無(wú)法新建,這篇文章主要給大家介紹了關(guān)于AndroidStudio無(wú)法新建Java工程的簡(jiǎn)單解決辦法,需要的朋友可以參考下2024-06-06
責(zé)任鏈模式在spring security過(guò)濾器鏈中的應(yīng)用小結(jié)
責(zé)任鏈模式在SpringSecurity過(guò)濾器鏈中的應(yīng)用,通過(guò)一系列的過(guò)濾器按順序處理請(qǐng)求,每個(gè)過(guò)濾器負(fù)責(zé)特定的安全功能,實(shí)現(xiàn)靈活且可擴(kuò)展的請(qǐng)求處理機(jī)制,感興趣的朋友跟隨小編一起看看吧2024-11-11
利用hadoop查詢兩兩之間有共同好友及他倆的共同好友都是誰(shuí)
一想到要實(shí)現(xiàn)求共同好友的功能,很多人都會(huì)想到redis來(lái)實(shí)現(xiàn)。但是redis存儲(chǔ)和數(shù)據(jù)和計(jì)算時(shí)需要耗費(fèi)較多的內(nèi)存資源。所以文本將介紹另一種方法,即利用Hadoop中的MapReduce來(lái)實(shí)現(xiàn),感興趣的可以了解一下2022-01-01

