第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關(guān)于JAVA的this關(guān)鍵字

關(guān)于JAVA的this關(guān)鍵字

瀟湘沐 2019-04-18 14:15:35
網(wǎng)上對this的描述很朦朧,有的說this表示的是當前對象自己,有的說this是當前對象的引用。可是自己寫了如下的測試代碼,產(chǎn)生了幾個問題: 1 public class T3AboutThis {  2   3     public static void main(String[] args) {  4         new SubT3().func();  5         SuperT3 s = new SuperT3();  6         System.out.println(s instanceof SubT3);//false  7     }  8 }  9  10 class SuperT3 { 11     protected String name = "Jack"; 12      13     protected void func() { 14         System.out.println(this.name);//Jack 15         System.out.println(this instanceof SuperT3);//true 16         System.out.println(this instanceof SubT3);//true 17     } 18 } 19 class SubT3 extends SuperT3 { 20     protected String name = "Peter"; 21 }1.this表示的是指向一個實例嗎。如果不是指向一個實例,那么為什么this可以參與instanceof運算或當作引用參數(shù)傳進方法里,super為什么不能?2.如果this表示當前對象,那么我在第4行new的SubT3的實例,在第14行為什么沒有打印出peter呢。3.如果在第14行時,this只表示SuperT3的引用(我也不知道到底引用什么),那為什么第16行沒有打印出與第6行相同的結(jié)果呢?我真的是有點繞暈了。
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

1.this表示的是指向一個實例嗎。如果不是指向一個實例,那么為什么this可以參與instanceof運算或當作引用參數(shù)傳進方法里,super為什么不能?
-- this表示的是指向一個實例。 System.out.println(s instanceof SubT3);//false 這個地方之所以返回false 是因為 s的類型是 SuperT3 所以 “s instanceof SubT3” 是返回false

2.如果this表示當前對象,那么我在第4行new的SubT3的實例,在第14行為什么沒有打印出peter呢。
--首先說this的類型是SubT3 這是確定的,所以this instanceof SuperT3 和 this instanceof SubT3都是true. 第14行打印出Jack是正確的。要從內(nèi)存結(jié)構(gòu)看,子類是無法覆蓋父類的成員變量的,所以對于SubT3 來說里面有兩個 name, 一個是Jack 一個是peter。那么究竟是調(diào)用哪個name呢?是調(diào)用基類的name,因為成員變量是不能重載的,也就是說 調(diào)用成員變量的函數(shù)在基類中 則使用基類的成員變量 調(diào)用成員變量的函數(shù)在子類中則使用子類中的成員變量。 如果想要 輸出peter,只需要在SubT3 重載func 也就是將func的代碼復制在SubT3中 就會輸出peter. 記?。撼蓡T變量是不會被重載的 只有 函數(shù)會被重載。

3.如果在第14行時,this只表示SuperT3的引用(我也不知道到底引用什么),那為什么第16行沒有打印出與第6行相同的結(jié)果呢?
--看第2條的回答 this不是superT3 是 subT3 只是因為成員變量是無法重載的 依賴于調(diào)用它的函數(shù)所在類。

另外說明一下,如果基類的成員變量可以被同名的子類中成員變量替換,那會產(chǎn)生災(zāi)難的后果。比如基類中有個數(shù)組 里面存儲了一些 標識 比如 0 1 2 而在子類中 聲明了同樣一個名字的數(shù)組 里面是 3 4 5 那么基類運行到基類的方法的時候 本來處理 0 1 2 現(xiàn)在卻處理 3 4 5 會產(chǎn)生不可預(yù)知的結(jié)果。如果想改變基類的行為 重載他的函數(shù) 重新定義新的行為。

希望能幫到你


查看完整回答
反對 回復 2019-05-06
?
慕尼黑5688855

TA貢獻1848條經(jīng)驗 獲得超2個贊

我也在學JAVA 這兩天做課設(shè) 做的頭都大了啊


查看完整回答
反對 回復 2019-05-06
  • 3 回答
  • 0 關(guān)注
  • 429 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號