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

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么會這樣輸出?

57ce94d10001809205000320.jpg

57ce94d80001d9e905000228.jpg

57ce94de00014db105000320.jpg

57ce94e50001326703920095.jpg

為什么輸出中dog.mothod( );和重寫toString( )方法的結(jié)果中age都為Animal類中的age的值10,而不是22,name都為dog.name="xiaoming",而不是“Cat”。

正在回答

4 回答

在Dogs里面聲明了age變量同時又繼承了父類里面的age變量,這時候主程序?qū)ge賦值實際上是dog.this.age=22;而super.age的初始值是Animal定義的=10;

你在mothod函數(shù)里面調(diào)用super.eat函數(shù)使用的是super.age,也就是為10. 同時對于從Animal繼承的toString函數(shù)里面調(diào)用的也是super.age,同樣結(jié)果為10.

而name由于在子類沒有被定義同名變量所以主函數(shù)賦值的xiaoming,從而在Animal里面賦值語句沒有被執(zhí)行,所以輸出的都是xiaoming。


-----------------上面說的不太清楚,我從內(nèi)存的角度說下吧-----------------

先實例Animal,內(nèi)存:地址1-》age ? 地址2-》name;eat函數(shù)和toString調(diào)用地址1和地址2的變量

再接著實例Dogs,內(nèi)存變成:地址1-》super.age ? 地址2-》name ? 地址3-》this.age;super.eat函數(shù)和toString調(diào)用地址1和地址2的變量;eat函數(shù)不調(diào)用變量;method函數(shù)調(diào)用super.eat函數(shù);

主函數(shù)的age賦值給地址3,name賦值給地址2,Animal的age賦值給了地址1,name本該賦值給地址2但是主函數(shù)賦值過所以不操作;

希望這樣表述你能明白

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕粉18883846529 提問者

非常感謝!
2016-09-06 回復(fù) 有任何疑惑可以回復(fù)我~

age是全局變量,所以兩次賦值都改變了同一內(nèi)存中的值,而name是局部變量,兩次改變不是同一內(nèi)存地址的值,取第一次賦值的值

0 回復(fù) 有任何疑惑可以回復(fù)我~

把dog類的第四行注釋掉

0 回復(fù) 有任何疑惑可以回復(fù)我~

把第四行注釋掉試試?

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學(xué)習(xí)       531212    人
  • 解答問題       6327    個

課程升級!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會Java面向?qū)ο缶幊痰膴W妙

進入課程

為什么會這樣輸出?

我要回答 關(guān)注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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