1. 程式人生 > 其它 >super 和 this 的區別

super 和 this 的區別

 一、二者的區別

1.屬性的區別:
this訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續查詢。super訪問父類中的屬性。
2.方法的區別:
this訪問本類中的方法,如果本類沒有此方法則從父類中繼續查詢。super訪問父類中的方法。
3.構造的區別:
this呼叫本類構造,必須放在[構造方法](https://so.csdn.net/so/search?q=構造方法&spm=1001.2101.3001.7020)的首行。super呼叫父類構造,必須放在子類構造方法首行。
4.其他區別:
this表示當前物件。super不能表示當前物件
A、this. 變數和super.變數
this.變數 呼叫的當前物件的變數;
super.變數 直接呼叫的是父類中的變數。
B、this(引數)和super(引數)方法
this(引數) 呼叫(轉發)的是當前類中的構造器;
super(引數) 用於確認要使用父類中的哪一個構造器。

 二、注意點:

1)在對擁有父類的[子類](https://so.csdn.net/so/search?q=子類&spm=1001.2101.3001.7020)進行初始化時,父類的構造方法也會執行,且優先於子類的建構函式執行;因為每一個子類的建構函式中的第一行都有一條預設的隱式語句super();
2)this() 和super()都只能寫在建構函式的第一行;
3)this() 和super() 不能存在於同一個建構函式中。第一,this()和super()都必須寫在建構函式的第一行;第二,this()語句呼叫的是當前類的另一個建構函式而這個另一個建構函式中必然有一個父類的構造器,再使用super()又呼叫一次父類的構造器, 就相當於呼叫了兩次父類的構造器,編譯器不會通過;
4)this和super不能用於static修飾的變數,方法,程式碼塊;因為this和super都是指的是物件(例項)。