目錄
this的原理
super的兩個用法
關於this和super的總結
this跟super呼叫**
哪個物件呼叫了this所在函式(包含this的函式,this一般都在方法內部呼叫),那麼this就代表哪個物件(這時候在壓棧的函式中this會把物件引用所對用的位址值拿過來,跟物件引用名指向堆記憶體中的具體物件)this的兩個用法
a: 區分成員變數和區域性變數
this物件後面跟上.呼叫的是本類的成員屬性和成員方法(一般方法),更多的時候用在成員變數與區域性變數重名時
b: 呼叫本類構造方法
this物件後面跟上()呼叫的是本類中的對應引數的建構函式。在構造方法的第一行呼叫,且只能呼叫一次,少引數的構造方法也可以呼叫多引數的構造方法,只是多出的引數寫死就是了
a:區分子類成員還是父類成員當子類與父類中的成員變數或者成員方法重名時,用super來區分是去呼叫哪乙個
b:呼叫父類的建構函式
super可以在子類建構函式中呼叫父類的建構函式(至於呼叫哪乙個,要看super裡面寫的引數),每乙個子類的建構函式第一行預設呼叫的是父類中空參的建構函式
關於this和super,我們可以這樣理解,當乙個類不存在繼承時,他只有this關鍵字代表乙個本類物件的引用(可以說是位址),那麼當存在子父類關係時,這時候子類的權利就變大了,他擁有了兩個關鍵字,this與super,他們分別指向子父類的乙個引用,所以在子類中呼叫super.成員變數和方法就相當於呼叫這個位址指向的變數與方法(可能在記憶體中的展示不是這樣,但是這樣理解起來簡單),如果在子類建構函式中呼叫了this指代的其他子類函式,則不會再去呼叫父類空參的構造方法super(),因為兩個呼叫都要在第一行,相衝突
首先將**載入進方法區,而子的class檔案會有乙個父的class檔案引用main方法開始執行,在堆中建立子類物件,如圖所示,父類內容巢狀在子類內容裡面
執行show方法,分別列印了區域性變數,子類num成員變數,父類num成員變數
執行子類的method方法,而子類的method方法中盜用了super.method父類方法,這時候父類method方法又進棧,等執行完畢,按照父method,子method,show,main的順序彈棧
Java 物件導向中的this和super用法
this 1 使用在類中,可以用來修飾屬性 方法 構造器 2 表示當前物件或者是當前正在建立的物件 3 當形參與成員變數重名時,如果在方法內部需要使用成員變數,必須新增 this 來表明該變數時類成員 public void setname string name 4 在任意方法內,如果使用當前類的...
Python 物件導向 super 函式
super 函式是用於呼叫父類 超類 的乙個方法。super 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序 mro 重複呼叫 鑽石繼承 等種種問題。mro 就是類的方法解析順序表,其實也就是繼承父類方法時的順序表。語法 以下是 sup...
Python物件導向 重寫與Super
如果給已經存在的類新增新的行為,採用繼承方案 如果改變已經存在類的行為,採用重寫方案 上面類的例項化 in 1 contact.all contacts 列表記錄了例項化的5個物件 main contact at main contact at main contact at main friend...