1. 程式人生 > 實用技巧 >this、super關鍵字

this、super關鍵字

2020-10-18        [email protected]        stronglzq

【摘要】針對常用到的this、super關鍵字進行總結。this關鍵字用來指代當前物件,super用來指代父類物件。

this關鍵字

this關鍵字用來訪問當前類的內容,指代當前物件,主要有以下用法:

(1)當方法中的變數與所在類的成員變數名稱相同時,用this.成員變數表示類的成員變數。

public class Person{
      private String name;
      private int age;

      public Person(String name){
            // 區域性變數name將成員變數遮蔽
            this.name = name;
      }
}

(2)用this呼叫過載構造方法,即一個構造方法呼叫另一個構造方法,注意必須為構造方法的第一句,並且編譯器禁止在其他地方呼叫構造器。

public class Person{
      private String name;
      private int age;

      // 無參構造方法1
      public Person(){
            System.out.println("Consructor with no parameter.");
      }

      // 有參構造方法2,呼叫無參構造1
      public Person(String name, int age){
            this();
            this.name = name;
            this.age = age;
            System.out.println("Constructor with parameter name, age.")
      }
}

(3)用this呼叫當前類的其他方法,語法為this.被呼叫的方法名,但呼叫當前類的其他方法直接呼叫即可,無需使用this。

(4)this和super關鍵字無法在靜態方法中使用。因為this指代當前物件,super指代父類物件,而靜態方法屬於類,只能通過類來呼叫,而無法通過物件來呼叫。
注:main()方法是靜態方法,故在main()方法中無法使用this和super關鍵字。

super關鍵字

與this關鍵字對應,super關鍵字用來呼叫父類的內容,指代父類物件。super主要有以下用法:

(1)呼叫父類的成員變數,語法為super.父類成員變數

(2)呼叫父類的成員方法,語法為super.父類成員方法

(3)子類構造方法呼叫父類構造方法,注意只能在構造方法中呼叫構造方法,並且呼叫語句必須放在第一句

public class Person{
      private String name;
      private int age;
      
      public Person(){
            System.out.println("Superclass constructor with no parameter");
      }
}

public class Teacher extends Person{
      public Teacher(){
            super();
            System.out.println("Subclass constructor that called superclass constructor");
      }
}

(4)注意this、super兩個關鍵字不能在靜態方法中使用。