物件導向 this和super

2021-10-24 09:22:24 字數 1223 閱讀 8164

目錄

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...