詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用
詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用
在Java中創(chuàng)建一個類的對象時,如果該類存在父類,則先調(diào)用父類的構(gòu)造方法,然后再調(diào)用子類的構(gòu)造方法。如果父類沒有定義構(gòu)造方法,則調(diào)用編譯器自動創(chuàng)建的不帶參數(shù)的默認構(gòu)造方法。如果父類定義了public的無參的構(gòu)造方法,則在調(diào)用子類的構(gòu)造方法前會自動先調(diào)用該無參的構(gòu)造方法。如果父類只有有參的構(gòu)造方法,沒有無參的構(gòu)造方法,則子類必須在構(gòu)造方法中必須顯式調(diào)用super(參數(shù)列表)來指定某個有參的構(gòu)造方法。如果父類定義有無參的構(gòu)造方法,但無參的構(gòu)造方法聲明為private,則子類同樣必須在構(gòu)造方法中必須顯式調(diào)用super(參數(shù)列表)來指定某個有參的構(gòu)造方法。如果父類沒有其他的有參構(gòu)造方法,則子類無法創(chuàng)建。
| 有父類 | 子類 | ||
|---|---|---|---|
| Public無參構(gòu)造方法 | Private無參構(gòu)造方法 | 有參構(gòu)造方法 | |
| 無 | 無 | 無 | 所有構(gòu)造方法都會調(diào)用父類的默認構(gòu)造方法 |
| 有 | 無 | 無 | 所有構(gòu)造方法都會調(diào)用定義的無參構(gòu)造方法 |
| 無 | 無 | 有 | 所有構(gòu)造方法都必須指定調(diào)用某個有參的構(gòu)造方法,或通過this調(diào)用某個其他的構(gòu)造方法。 |
| 有 | 無 | 有 | 可以指定調(diào)用某個構(gòu)造方法,如果沒有指定,則調(diào)用無參構(gòu)造方法。 |
| 無 | 有 | 無 | 子類無法構(gòu)造(父類無法派生子類) |
| 無 | 有 | 有 | 所有構(gòu)造方法都必須指定調(diào)用某個有參的構(gòu)造方法,或通過this調(diào)用某個其他的構(gòu)造方法。 |
例如:
class Parent {
private String pString;
Parent(){
pString = "p1";
}
}
class Child extends Parent {
private String cString;
Child() {
cString = "c1";
}
}
當Child對象創(chuàng)建時,會先調(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的無參構(gòu)造方法,因此,在子類中必須顯式指定調(diào)用某個有參的構(gòu)造方法。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Mybatis中collection和association的使用區(qū)別詳解
這篇文章主要介紹了Mybatis中collection和association的使用區(qū)別詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
SpringBoot參數(shù)校驗之@Valid的使用詳解
這篇文章主要通過示例為大家詳細介紹一下介紹了SpringBoot參數(shù)校驗中@Valid的使用方法,文中的示例代碼講解詳細,需要的可以參考一下2022-06-06
@RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決
這篇文章主要介紹了@RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
Java如何使用JSR303校驗數(shù)據(jù)與自定義校驗注解
這篇文章主要介紹了Java如何使用JSR303校驗數(shù)據(jù)與自定義校驗注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
java中JsonObject與JsonArray轉(zhuǎn)換方法實例
在項目日常開發(fā)中常常會遇到JSONArray和JSONObject的轉(zhuǎn)換,很多公司剛?cè)肼毜男∶刃聲ㄔ谶@里,下面這篇文章主要給大家介紹了關(guān)于java中JsonObject與JsonArray轉(zhuǎn)換方法的相關(guān)資料,需要的朋友可以參考下2023-04-04
解析java.library.path和LD_LIBRARY_PATH的介紹與區(qū)別
這篇文章主要介紹了java.library.path和LD_LIBRARY_PATH的介紹與區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05

