super用途:在子類中訪問超類「被隱藏的成員變量(不管是否靜態)和靜態方法」以及「被重寫的實例方法」。這裏的超類必須是「直接超類」,即子類之上最近的超類。
super的用法:
①在子類構造方法中調用超類的構造方法,用「super(ParamList)」的方式調用,ParamList根據超類構造方法而定,能夠爲空。另外super(ParamList)必須是子類構造方法的第一句。
②當超類的成員變量因與子類的成員變量同名而被隱藏時(成員變量隱藏與是否靜態無關),可用"super.memberVariableName"來訪問超類的成員變量。
注意:有些人說當超類的成員變量與子類某方法的局部變量或參數同名時,也屬於被隱藏。那麼一旦離開該方法隱藏還成立嗎,顯然這種說法是錯誤的。隱藏概念只限於成員變量範圍,方法體內的局部變量與成員變量同名屬於下面的this要討論的內容。
假設有超類parent,其中有成員變量A,子類child,其中有方法method(type A)存在:
1)若是子類沒有隱藏超類成員變量A,在method(type A)中,不管使用this.A仍是super.A都是同樣的,都會訪問超類成 員變量A;(this.A就是繼承下來的,換句話說,對於天然繼承下來(沒有隱藏/重寫)的成員變量甚至是方法,super.memberName=this.membername)
2)若是子類有成員變量A隱藏了超類成員變量A,在method(type A)中,super.A=parent.A,this.A=child.A,二者有區別。
③當超類的靜態方法/實例方法被子類隱藏/重寫時,可以使用"super.methodName(ParamList)"來訪問超類方法。對於靜態方法而言,這沒什麼奇怪,對於實例方法而言,這種用法使得超類被重寫的方法在子類中可見。
最後須要注意,super關鍵字不能在靜態方法中使用!
------this關鍵字------
this的用途:引用對象自己。
當一個對象建立後,Java虛擬機就會給這個對象分配一個引用自身的指針,這個指針的名字就是this。所以,this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this。而且this只和特定的對象關聯,而不和類關聯,同一個類的不一樣對象有不一樣的this。
this用法:
①在構造方法中,用this(ParamList)調用本身的另外一個構造方法,this(ParamList)必須放在第一句位置!此用法只限於在構造方法中使用。
②某方法的參數或局部變量與某個成員變量同名時,在該方法中要訪問該成員變量須要用「this.memberVariableName」的形式。
③某方法中須要引用其所屬類的當前對象時,直接用this來引用當前對象。
示例代碼: