天天看點

面向對象之this與super

對象執行個體化時,至少有一條從本類觸發抵達Object的通路,而打通這條路的兩個工兵就是this和super,逢山開路,遇水搭橋。但是this和super往往是默默無聞的,在很多情況下可以省略,比如:

本類方法調用本類屬性

本類方法調用另一個本類方法

子類構造方法隐含調用super()

 任何類在建立之初,都有一個預設的空構造方法,他是super()的一條預設通路。構造方法的參數清單決定了調用通路的選擇,如果子類指定調用父類的某個構造方法,super就會不斷往上溯源,如果沒有指定,則預設調用super()。如果父類沒有提供預設的構造方法,子類在繼承時就會編譯錯誤。

如果父類堅持不提供預設的無參構造方法,必須在本類的無參構造方法中使用super方式調用父類的有參構造方法。

一個執行個體變量可以通過this指派另一個執行個體變量;一個執行個體方法可以通過this.調用另一個執行個體方法;甚至一個構造方法都可以通過this.調用另一個構造方法。

如果this和super指代構造方法,則必須位于方法體的第一行。

換句話說,在一個構造方法中,this和super隻能出現一次,否則在執行個體化對象時,會因子類調用到多個父類構造方法而造成混亂。

this和super的異同點分析

共同點

  • 都是關鍵字,起指代作用;
  • 在構造方法中必須出現在第一行

不同點

對比次元 this super
基本概念 通路本類執行個體屬性和方法 由子類通路父類中的執行個體屬性和方法
查找範圍 先找本類,沒有則找父類 直接查找父類
特異功能 單獨使用時,表示目前對象 在子類覆寫父類方法時,通路父類同名方法