中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Java項目中使用繼承構造器

發布時間:2021-03-22 17:32:55 來源:億速云 閱讀:171 作者:Leah 欄目:編程語言

本篇文章為大家展示了如何在Java項目中使用繼承構造器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

默認構造器

先看一段簡單的測試代碼:

package com.my.pac13;
/*繼承中的構造*/
public class Person {
  Person(){
    System.out.println("Person()");
  }
}
class Student extends Person{
  Student(){
    System.out.println("Student()");
  }
}
class PrimaryStudent extends Student{
  PrimaryStudent(){
    //super();
    System.out.println("PrimaryStudent()");
  }
  public static void main(String[] args) {
    //創建了PrimaryStudent對象
    new PrimaryStudent();
  }
}
/*
 Person()
 Student()
 PrimaryStudent()
*/

關于構造器,我們前面提到,任何沒有顯式構造器的類都存在著一個無參數的默認構造器。我們上面的例子在默認構造器中加入了打印輸出,以便理解。

可以看到的是:

在創建PrimaryStudent時,他的直接父類Student和間接父類Person中的構造器都被調用了,而且可以看到,是"自上而下"的。
父類在子類構造器可以訪問它之前,就已經完成了初始化的操作。

若子類沒有顯式調用父類的構造器,則自動調用父類的默認(無參)構造器。

帶參數的構造器

前面的代碼中,每個類都含有默認的構造器,創建子類對象時,是自上而下,且子類會默認調用父類的無參構造器。那么,假設父類正好沒有無參構造器或者你正想調用父類的帶參構造器,這時就需要我們的super關鍵字。(super關鍵字之后還會進行總結)

我們直接在原來的基礎上稍作修改,并進行測試。

package com.my.pac13;
/*調用基類構造器是子類構造器中要做的第一件事*/
public class Person {
  //沒有默認構造器
  Person(String name){
    System.out.println("Person()\t"+name);
  }
}
class Student extends Person{
  //也沒有默認構造器,且用super顯式調用
  Student(String n){
  //super關鍵字調用父類的構造器
    super(n);
    System.out.println("一參數Student\t"+n);
  }
  Student(String n,String m){
  //this關鍵字調用同一類中重載的構造器
    this(n);
    System.out.println("二參數student()\t"+m);
  }
}
class PrimaryStudent extends Student{
  //隱式調用父類構無參數構造器,但是父類沒有,所以要用super顯式調用
  PrimaryStudent(){
  //沒有下面的語句會報錯
    super("hello");
    System.out.println("PrimaryStudent()");
  }

}
class ExtendsTest{
  public static void main(String[] args) {
    new Person("the shy");
    System.out.println("***********");
    new Student("rookie");
    System.out.println("***********");
    new Student("the shy","rookie");
    System.out.println("***********");
    new PrimaryStudent();
    System.out.println("***********");
  }

}
/*
Person()  the shy
***********
Person()  rookie
一參數Student rookie
***********
Person()  the shy
一參數Student the shy
二參數student()  rookie
***********
Person()  hello
一參數Student hello
PrimaryStudent()
***********
 */
  • this是正在創建的對象,用于調用同一類中重載的構造器,可以參看我之前的文章:Java關鍵字之this。

  • super在調用構造器時,使用方法和this相似。(但super和this本身有本質的不同,super并不是一個對象的引用!!!)

  • super和this語句都必須出現在第一行,也就是說一個構造器中只能有其中之一。

子類調用父類構造器

無論是否使用super語句來調用父類構造器的初始化代碼,子類構造器總是會事先調用父類構造器!這是一定要記住的!

子類構造器A在第一行顯式使用super調用父類構造器B,格式super(參數列表),根據參數列表選擇對應的父類構造器。

//父類
 Person(String name){
    System.out.println("Person()\t"+name);
  }
//子類
 Student(String n){
  //super關鍵字調用父類的構造器
    super(n);
    System.out.println("一參數Student\t"+n);
  }

子類構造器A先用this調用本類重載的構造器B,然后B調用父類構造器。

//父類
 Person(String name){
    System.out.println("Person()\t"+name);
  }
//子類
Student(String n){
  //super關鍵字調用父類的構造器
    super(n);
    System.out.println("一參數Student\t"+n);
  }
Student(String n,String m){
//this關鍵字調用同一類中重載的構造器
  this(n);
  System.out.println("二參數student()\t"+m);
}

子類構造器中沒有super和this時,系統會隱式調用父類的無參構造器,要是沒有無參的,那就報錯。

//隱式調用父類構無參數構造器,但是父類沒有,所以要用super顯式調用
PrimaryStudent(){
//沒有下面的語句會報錯
  super("hello");
  System.out.println("PrimaryStudent()");
}

上述內容就是如何在Java項目中使用繼承構造器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁阳县| 秭归县| 南宫市| 大理市| 西充县| 宜兰市| 楚雄市| 洪江市| 涞水县| 澄迈县| 永仁县| 泗阳县| 隆子县| 鄂托克旗| 高雄市| 利津县| 和政县| 庆云县| 西吉县| 嵊泗县| 汤阴县| 兴海县| 密云县| 甘南县| 闽清县| 密山市| 蛟河市| 萝北县| 邳州市| 长子县| 太仆寺旗| 浑源县| 兴和县| 定边县| 堆龙德庆县| 合水县| 连平县| 闽侯县| 乐都县| 胶州市| 陇西县|