欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java構(gòu)造函數(shù)里的一些坑記錄super()和this()

 更新時間:2024年03月25日 09:02:50   作者:nvd11  
這篇文章主要介紹了Java構(gòu)造函數(shù)里的一些坑記錄super()和this(),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

super() 和 this()

這個很好理解, super() 就是在子類的構(gòu)造函數(shù)里調(diào)用父類的構(gòu)造函數(shù)

this() 就是調(diào)用同類的另1個不同參數(shù)類型的構(gòu)造函數(shù).

坑1 super()和this()都只能用在構(gòu)造函數(shù)中,且必須是方法體第一行

大家都知道, 其實這不算坑

坑2 某些情況下,構(gòu)造方法不會被自動繼承,如果需要必須重寫

例如, 父類:

@Slf4j
public class ParentC1 {

    private int id;
    private String name;

    public ParentC1(){
        this.id = 1;
        this.name = "name";
        log.info("ParentC1()..");
    }

子類:

@Slf4j
public class ChildC1 extends ParentC1 {
	 private int age;

}

這時子類是自動繼承父類的無參函數(shù)的, 可以被實例化…

但是 如果加上另1個參數(shù)類型的構(gòu)造函數(shù)給子類

@Slf4j
public class ChildC1 extends ParentC1 {

    private int age;
    public ChildC1(int id, String name) {
        this.age = 1;
        log.info("ChildC1(id, name)..");
    }
}

這時就不能通過無參構(gòu)造函數(shù)實例化子類了, 因為java發(fā)現(xiàn)子類已有1個構(gòu)造函數(shù), 不會自動從父類繼承。

坑3 子類總會隱含地調(diào)用父類構(gòu)造函數(shù)(super())

注意, 這里兩個關(guān)鍵字, 隱含和調(diào)用

隱含意思是隱患了super() 聲明, 調(diào)用是指的調(diào)用而不是繼承。

例子1:

例如, 父類:

@Slf4j
public class ParentC1 {

    private int id;
    private String name;

    public ParentC1(){
        this.id = 1;
        this.name = "name";
        log.info("ParentC1()..");
    }

子類:

@Slf4j
public class ChildC1 extends ParentC1 {

    private int age;
    public ChildC1() {
       log.info("ChildC1()..");
    }
}

這是調(diào)用子類無參構(gòu)造和函數(shù)時,會調(diào)用父類無參構(gòu)造方法, 無論有無聲明super()

例子2:

例如, 父類:

@Slf4j
public class ParentC1 {

    private int id;
    private String name;
    
    public ParentC1(){
        this.id = 1;
        this.name = "name";
        log.info("ParentC1()..");
    }
    
	public ParentC1(int id, String name) {
        this.id = id;
        this.name = name;
        log.info("ParentC1(id, name)..");
    }

子類:

@Slf4j
public class ChildC1 extends ParentC1 {
	 private int age;

    public ChildC1(){
        log.info("ChildC1()..");
    }

    public ChildC1(int id, String name) {
        super(id,name);
        this.age = 1;
        log.info("ChildC1(id, name)..");
    }
}

父類和都增加了(int id, String name) 這個雙參構(gòu)造 函數(shù)

在子類的雙參構(gòu)造函數(shù)里顯示調(diào)用父類的雙參構(gòu)造函數(shù)。

這時, 調(diào)用子類雙參構(gòu)造函數(shù)時, 父類的雙參構(gòu)造函數(shù)會被調(diào)用, 順理成章,這例子主要用于下面的例子對比。

例子3:

例如, 父類:

@Slf4j
public class ParentC1 {

    private int id;
    private String name;
    
    public ParentC1(){
        this.id = 1;
        this.name = "name";
        log.info("ParentC1()..");
    }
    
	public ParentC1(int id, String name) {
        this.id = id;
        this.name = name;
        log.info("ParentC1(id, name)..");
    }

子類:

@Slf4j
public class ChildC1 extends ParentC1 {
	 private int age;

    public ChildC1(){
        log.info("ChildC1()..");
    }

    public ChildC1(int id, String name) {
        //super(id,name);
        this.age = 1;
        log.info("ChildC1(id, name)..");
    }
}

這個例子3 對比例子2 只是隱藏了子類雙參構(gòu)造函數(shù)里的 super(id, name)

重點來了, 這是調(diào)用子類雙參構(gòu)造函數(shù),仍然會嘗試調(diào)用父類的構(gòu)造函數(shù), 但是會默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)。

例子4:

例如, 父類:

@Slf4j
public class ParentC1 {

    private int id;
    private String name;
      
	public ParentC1(int id, String name) {
        this.id = id;
        this.name = name;
        log.info("ParentC1(id, name)..");
    }

子類:

@Slf4j
public class ChildC1 extends ParentC1 {
	 private int age;

    public ChildC1(){
        log.info("ChildC1()..");
    }

    public ChildC1(int id, String name) {
        //super(id,name);
        this.age = 1;
        log.info("ChildC1(id, name)..");
    }
}

例子4 相對于例子3 刪除了父類的無參構(gòu)造函數(shù), how is it then?

這是編譯失敗, 同時會被IDE科普教育

子類找不到可以默認(rèn)調(diào)用的父類無參函數(shù),

而子類雙參構(gòu)造 函數(shù)是不會默認(rèn)調(diào)用父類的雙參構(gòu)造函數(shù)的, 即使參數(shù)類型完全一樣。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis-Plus忽略多租戶隔離自定義注解

    MyBatis-Plus忽略多租戶隔離自定義注解

    本文主要介紹了MyBatis-Plus忽略多租戶隔離自定義注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Java中語音url轉(zhuǎn)換成InputStream的示例代碼

    Java中語音url轉(zhuǎn)換成InputStream的示例代碼

    在Java中,可以使用java.net.URL和java.net.URLConnection類來將語音URL轉(zhuǎn)換為InputStream,本文通過示例代碼介紹Java中語音url轉(zhuǎn)換成InputStream的相關(guān)知識,感興趣的朋友一起看看吧
    2024-01-01
  • 應(yīng)用市場中Java攔截器和切面的使用實例詳解

    應(yīng)用市場中Java攔截器和切面的使用實例詳解

    這篇文章主要介紹了應(yīng)用市場中Java攔截器和切面的使用實例詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot3.x集成nacos并實現(xiàn)多環(huán)境配置的操作步驟

    SpringBoot3.x集成nacos并實現(xiàn)多環(huán)境配置的操作步驟

    本文詳細(xì)介紹了如何在Springboot3.x中集成Nacos2.x版本,包括nacos的安裝、配置更改,以及在集成過程中遇到的問題,如端口設(shè)置、依賴版本調(diào)整等,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • java查詢近七日數(shù)據(jù)功能的實現(xiàn)

    java查詢近七日數(shù)據(jù)功能的實現(xiàn)

    這篇文章主要介紹了java查詢近七日數(shù)據(jù)功能的實現(xiàn),文章內(nèi)容詳細(xì),簡單易懂,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2023-01-01
  • java HttpClient傳輸json格式的參數(shù)實例講解

    java HttpClient傳輸json格式的參數(shù)實例講解

    這篇文章主要介紹了java HttpClient傳輸json格式的參數(shù)實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 如何通過Kaptcha在Web頁面生成驗證碼

    如何通過Kaptcha在Web頁面生成驗證碼

    這篇文章主要介紹了如何通過Kaptcha在Web頁面生成驗證碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • ShardingSphere結(jié)合MySQL實現(xiàn)分庫分表的項目實踐

    ShardingSphere結(jié)合MySQL實現(xiàn)分庫分表的項目實踐

    在實際開發(fā)中,如果表的數(shù)據(jù)過大我們需要把一張表拆分成多張表,本文主要介紹了使用ShardingSphere實現(xiàn)MySQL分庫分表,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • SpringBoot自動配置與啟動流程詳細(xì)分析

    SpringBoot自動配置與啟動流程詳細(xì)分析

    這篇文章主要介紹了SpringBoot自動配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對SpringBoot實現(xiàn)自動配置做一個詳細(xì)的介紹。如果可以的話,能不能畫一下實現(xiàn)自動配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點
    2022-11-11
  • java冒泡排序和快速排序代碼

    java冒泡排序和快速排序代碼

    本文主要介紹了java冒泡排序和快速排序的實例代碼。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04

最新評論