Java基礎-super關鍵字與this關鍵字

用super調用父類構造方法
類如果沒有顯式聲明構造方法,則自動生成無參數的默認構造方法。
1.先用一個無參數的父類構造方法驗證一下,
執行子類構造方法會自動調用父類的構造方法。測試代碼:
複製代碼
class Human3{
    public Human3(){
        System.out.println("構造一個人");
    }
}
class Pupil3 extends Human3{
    public Pupil3(){
//        super(); //本句註釋與不註釋執行結果是一樣的
        System.out.println("構造了一個學生 ");
    }
}
public class Example3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
     Pupil3 pupil3=new Pupil3();   
    }
}
複製代碼

運行結果:

表明,子類構造方法會默認調用父類的構造方法,對於無參的父類構造方法,寫不寫super()輸出結果是一樣的。

2.用一個有參數的父類構造方法驗證一下。
執行子類構造方法會自動調用父類的構造方法。測試代碼:
複製代碼
 1 class Human3 {
 2 
 3     private String name;
 4     private int age;
 5 
 6     public Human3(String name) {
 7         super();
 8         this.name = name;
 9         System.out.println("構造一個人");
10     }
11 
12 }
13 
14 class Pupil3 extends Human3 {
15     private String ID;
16     private String name;
17     private int age;
18 
19     public Pupil3(String name, String iD, int age) {
20         super(name);
21         ID = iD;
22         this.age = age;
23         System.out.println("構造一個小學生");
24     }
25 
26 }
27 
28 public class Example3 {
29 
30     public static void main(String[] args) {
31         // TODO Auto-generated method stub
32         Pupil3 pupil3 = new Pupil3("張三", "p123", 10);
33     }
34 }
複製代碼

運行結果

3.此時如果註釋掉super方法就會報錯。

報錯原因:子類必須繼承父類的構造方法,如果父類構造方法中沒有參數傳遞,那麼默認是不寫super()繼承父類的構造方法的。

Human3類的構造方法沒有無參數的構造方法,所以,必須繼承父類有參數的構造方法,所以,必須寫super關鍵字來繼承父類的有參數的構造方法。

除了調用父類構造方法外,super還可在子類中指代父類對象,用於:
訪問被子類隱藏的父類字段,
調用被子類覆蓋的父類方法。
使用形式:

    super.父類字段名

    super.父類方法名(可選實參表)

 
4.實例成員(實例字段、實例方法):沒有static修飾的成員。
實例成員就是非靜態成員,實例成員爲類對象所獨佔。
使用對象(實例)作前綴引用實例成員,語法形式:

      對象名.方法名(實參表)

      對象名.字段名

關鍵字this用於指代當前的對象。因此,類內部可以使用this作前綴引用實例成員。
例如,Pupil3類中可用this.age引用實例字段age。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章