最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù), 但是會默認調(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科普教育

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

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

總結(jié)

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

相關(guān)文章

  • Spring編程式和聲明式事務實例講解小結(jié)

    Spring編程式和聲明式事務實例講解小結(jié)

    這篇文章主要介紹了Spring編程式和聲明式事務實例講解小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • SpringBoot目錄變文件夾的原因和解決方案

    SpringBoot目錄變文件夾的原因和解決方案

    在 Spring Boot 項目中,當你在 src/main/java 下看到目錄結(jié)構(gòu)而不是包結(jié)構(gòu)時,這通常是 IDE(如 IntelliJ IDEA)的顯示問題或項目配置問題,以下是原因和解決方案,需要的朋友可以參考下
    2025-07-07
  • Java中ArrayList與順序表示例詳解

    Java中ArrayList與順序表示例詳解

    順序表是在計算機內(nèi)存中以數(shù)組的形式保存的線性表,是指用一組地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),這篇文章主要介紹了Java中ArrayList與順序表的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-12-12
  • MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法

    MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法

    這篇文章主要介紹了MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Intellij IDEA 與maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

    Intellij IDEA 與maven 版本不符 Unable to import maven project See

    這篇文章主要介紹了Intellij IDEA 與maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound,本文通過圖文給大家分享解決方案,需要的朋友可以參考下
    2020-08-08
  • Java世界時區(qū)自動計算及時間生成方法詳解

    Java世界時區(qū)自動計算及時間生成方法詳解

    這篇文章主要為大家詳細介紹了Java中世界時區(qū)自動計算及時間生成的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • Springboot任務之異步任務的使用詳解

    Springboot任務之異步任務的使用詳解

    今天學習了一個新技能SpringBoot實現(xiàn)異步任務,所以特地整理了本篇文章,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java列出2到100之間所有素數(shù)的方法

    Java列出2到100之間所有素數(shù)的方法

    這篇文章主要介紹了Java列出2到100之間所有素數(shù)的方法,涉及java數(shù)值運算的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • java實現(xiàn)四子棋游戲

    java實現(xiàn)四子棋游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)四子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 一文詳解Java異常處理你都了解哪些知識

    一文詳解Java異常處理你都了解哪些知識

    這篇文章主要介紹了Java異常處理的相關(guān)資料,包括異常的分類、捕獲和處理異常的語法、常見的異常類型以及自定義異常的實現(xiàn),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04

最新評論

绍兴市| 固镇县| 岳池县| 利辛县| 威信县| 双鸭山市| 祁东县| 新营市| 吴堡县| 大渡口区| 雅安市| 乡宁县| 洛宁县| 德昌县| 千阳县| 公主岭市| 桐梓县| 雅江县| 郸城县| 商洛市| 清水县| 泰安市| 樟树市| 丹巴县| 茶陵县| 安徽省| 双柏县| 横山县| 紫云| 罗平县| 新津县| 安福县| 长宁区| 六枝特区| 定远县| 南和县| 湘西| 保靖县| 泊头市| 武宣县| 秦安县|