一、定義
(一)super
1.子類可以繼承父類的非私有變量和方法(不是以private或者final關鍵字修飾的)作爲自己的變量和方法。但是,下列場景中,如果想在子類中訪問父類方法或變量,就可以使用super關鍵字。
1)如果子類隱藏了父類的變量(靜態變量或者實例變量【成員變量】)。
2)子類的靜態方法隱藏了父類靜態方法,當子類未轉換成父類型時(當父類的引用指向子類的實例,父類型的引用是可以點出父類被隱藏的方法的)。
3)子類的實例方法(成員方法)覆蓋了父類的實例方法(即使父類的引用指向子類的實例,父類型的引用也沒有辦法點出被覆蓋的方法)。
(二)this
1.Java關鍵字this只能用於實例方法方法體內。當一個對象創建後,Java虛擬機(JVM)就會給這個對象分配一個引用自身的指針,這個指針的名字就是this。因此,this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this,並且this只和特定的對象關聯,而不和類關聯,同一個類的不同對象有不同的this。
二、用法
(一) super
1.調用父類的構造方法。
1)子類的構造函數默認第一行會默認調用父類無參的構造函數,隱式語句。
2)如果顯式調用父類構造函數,編譯器自動添加的調用父類無參數的構造就消失。構造函數間的調用只能放在第一行,只能調用一次。
2.調用父類的屬性和函數。
(二) this
1.this調用本類中的屬性,也就是類中的成員變量。
2.this調用本類中的其他方法。
3.this調用本類中的其他構造方法,調用時要放在構造方法的首行。
三、總結
(一)super
1.super是當前對象裏面的父對象的引用
2.如果子類構造器中沒有super()出現,那麼編譯器則會默認加上super()即父類的空構造器(當然這空構造器可以是系統默認產生的那個),若此時父類中沒有空的構造器(即父類中聲明瞭一個有參數的構造器,使得系統不再生成默認的構造器),那麼編譯就會出錯。
3.注意,在同一個構造器中不能同時出現super關鍵字和this關鍵字。
(二)this
1.通過this調用另一個構造方法,用法是this(參數列表),這個僅僅在類的構造方法中,別的地方不能這麼用。
2.函數參數或者函數中的局部變量和成員變量同名的情況下,成員變量被屏蔽(隱藏),此時要訪問成員變量則需要用“this.成員變量名”的方式來引用成員變量。當然,在沒有同名的情況下,可以直接用成員變量的名字,而不用this。
3.在函數中,需要引用該函所屬類的當前對象時候,直接用this。