Java關鍵字super與this

一、定義

(一)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。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章