1. 程式人生 > >淺談this和super()

淺談this和super()

一直對this和super()關鍵字在使用方面和理解方面都不太清楚,根據以往經驗和各種資料總結出以下內容:

java程式碼中要物件實列化時,至少有一條從本類出發到Object的通道,而這條通道的開闢者主要就是thissuper,逢山開路,遇水搭橋,但是它倆往往是默默無聞的,在很多情況下可以被省略:

  • 本類方法呼叫本類屬性
  • 本類方法呼叫另一個類方法(本類繼承另一個類)
  • 子類構造方法隱含呼叫super()

任何類在建立之時,都有一個預設的無參構造方法,這個無參構造方法就是super()的一條預設通道,構造方法的引數列表決定了呼叫通道的選擇,如果子類指定呼叫父類的某個構造方法,super()就會不斷的往上走,如果沒有指定,則預設呼叫super()

,如果父類沒有提供預設的構造方法,子類在繼承時就會編譯錯誤

如果父類堅持不提供預設的無參構造方法,必須在本類的無參構造方法中使用super方式呼叫父類的有參構造方法,一個實列變數可以通過this賦值另一個實列變數,一個實列方法可以通過this呼叫另一個實列方法,甚至一個構造方法都可以通過this呼叫另一個構造方法,如果用this和super()指代構造方法,this和super()在一個構造方法中只能出現一個,也只能出現一次,如果兩個都出現,或者多次出現在實列化物件時,會因子類呼叫到多個父類構造方法而造成混亂

由於this和super()都在實列化階段呼叫,所以不能在靜態方法和靜態程式碼塊中使用this和super()關鍵字

,this還可以指代當前物件,如在同步(synchronized)程式碼塊中,但是super()並沒有此功能,但super()也有自己的功能,在子類重寫父類方法時,可以使用super()呼叫父類同名的實列方法

this和super()異同點

this super()
概念 訪問本類實列屬性和方法 有子類訪問父類中的實列屬性和方法
查詢範圍 先找本類,找不到再找父類 找父類
各異功能 單獨使用時,表示當前物件 在子類重寫父類方法時,訪問父類同名方法
相同點 1.都是關鍵字,起指代作用2.在構造方法中必須出現在第一行