this關鍵字
this的本質就是:創建好的物件的地址 -> 代表當前物件
構造方法是創建java物件的重要途經,通過new關鍵字呼叫構造器時,構造器回傳該類物件,但是該物件并不完全由構造器創建,
創建物件分為四步:
- 分配物件空間,將物件成員變數初始化為0或null;
- 執行屬性值顯式初始化;
- 執行構造方法;
- 回傳物件地址給相關變數
因為在呼叫構造方法前,物件已被創建,所以this可以在構造方法中充當當前物件
public construct(int id, String name){
this.id = id;
this.name = name;
}
舉個例子,分析一下創建物件的程序
class Person {
int age;
String sex;
public Person(int age, String sex) {
this.age = age;
this.sex = sex;
}
}
public class Demo {
public static void main(String[] args) {
Person person = new Person(22 ,"boy");
}
}

this可以呼叫多載的構造方法
class Person {
int age;
String sex;
String name;
public Person(int age, String sex) {
this.age = age;
this.sex = sex;
}
public Person(int age,String sex,String name){
this(age,sex); //this()訪問其他構造方法
this.name = name;
}
}
總結:
- this可以用于構造方法中代表當前物件;
- this也可以呼叫多載的構造方法,但是必須位于構造方法第一句;
- this不能用與static方法中
super關鍵字
-
訪問父類的建構式:可以使用 super() 函式訪問父類的建構式,從而委托父類完成一些初始化的作業,應該注意到,子類一定會呼叫父類的建構式來完成初始化作業,默認呼叫父類的無參建構式,如果子類需要呼叫父類其它建構式,那么就可以使用 super() 函式,但是必須位于構造方法第一句,(所以在構造器中this和super不能共存,只能用一個)
-
訪問父類的成員:如果子類重寫了父類的某個方法,可以通過使用 super 關鍵字來參考父類的方法實作,
public class SuperDemo {
protected int x;
protected int y;
public SuperDemo(int x, int y) {
this.x = x;
this.y = y;
}
public void func() {
System.out.println("呼叫父類方法");
}
}
public class SuperExtend extends SuperDemo {
private int z;
public SuperExtend(int x, int y, int z) {
super(x, y); //super()訪問父類構造方法
this.z = z;
}
@Override
public void func() {
super.func(); //super參考父類方法實作
System.out.println("呼叫子類方法");
}
}
運行結果:
呼叫父類方法
呼叫子類方法
兩者區別
| this | super | |
|---|---|---|
| 訪問屬性 | 從本類屬性開始訪問,本類有并且可以訪問則訪問;沒有從父類中查找,父類有并且可以訪問則訪問;如果父類沒有則繼續向上找直到Object類 | 直接從父類中開始查找,直到Object類 |
| 呼叫方法 | 呼叫本類方法,本類如果沒有此方法或則不能訪問,則從父類中呼叫,以此類推,直到Object類 | 直接呼叫父類方法,直到Object類 |
總而言之,this是先從本類開始查找屬性/方法,super是直接從其父類開始查找屬性/方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534084.html
標籤:Java
