淺談this和super()
阿新 • • 發佈:2018-12-16
一直對this和super()關鍵字在使用方面和理解方面都不太清楚,根據以往經驗和各種資料總結出以下內容:
java程式碼中要物件實列化時,至少有一條從本類出發到Object的通道,而這條通道的開闢者主要就是this和super,逢山開路,遇水搭橋,但是它倆往往是默默無聞的,在很多情況下可以被省略:
- 本類方法呼叫本類屬性
- 本類方法呼叫另一個類方法(本類繼承另一個類)
- 子類構造方法隱含呼叫super()
任何類在建立之時,都有一個預設的無參構造方法,這個無參構造方法就是super()的一條預設通道,構造方法的引數列表決定了呼叫通道的選擇,如果子類指定呼叫父類的某個構造方法,super()就會不斷的往上走,如果沒有指定,則預設呼叫super()
如果父類堅持不提供預設的無參構造方法,必須在本類的無參構造方法中使用super方式呼叫父類的有參構造方法,一個實列變數可以通過this賦值另一個實列變數,一個實列方法可以通過this呼叫另一個實列方法,甚至一個構造方法都可以通過this呼叫另一個構造方法,如果用this和super()指代構造方法,this和super()在一個構造方法中只能出現一個,也只能出現一次,如果兩個都出現,或者多次出現在實列化物件時,會因子類呼叫到多個父類構造方法而造成混亂
由於this和super()都在實列化階段呼叫,所以不能在靜態方法和靜態程式碼塊中使用this和super()關鍵字
this和super()異同點
this | super() | |
---|---|---|
概念 | 訪問本類實列屬性和方法 | 有子類訪問父類中的實列屬性和方法 |
查詢範圍 | 先找本類,找不到再找父類 | 找父類 |
各異功能 | 單獨使用時,表示當前物件 | 在子類重寫父類方法時,訪問父類同名方法 |
相同點 | 1.都是關鍵字,起指代作用2.在構造方法中必須出現在第一行 |