課程
/后端開發(fā)
/Java
/Java入門第二季 升級版
為什么輸出中dog.mothod( );和重寫toString( )方法的結(jié)果中age都為Animal類中的age的值10,而不是22,name都為dog.name="xiaoming",而不是“Cat”。
2016-09-06
源自:Java入門第二季 升級版 9-8
正在回答
在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ù)賦值過所以不操作;
希望這樣表述你能明白
慕粉18883846529 提問者
age是全局變量,所以兩次賦值都改變了同一內(nèi)存中的值,而name是局部變量,兩次改變不是同一內(nèi)存地址的值,取第一次賦值的值
把dog類的第四行注釋掉
把第四行注釋掉試試?
舉報
課程升級!以終為始告別枯燥,在開發(fā)和重構(gòu)中體會Java面向?qū)ο缶幊痰膴W妙
1 回答為什么會這樣輸出
3 回答為什么會輸出num1:91?
1 回答為什么順序是這樣輸出的?
3 回答為什么會這樣
3 回答為什么我運行出來會這樣?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-09-06
在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ù)賦值過所以不操作;
希望這樣表述你能明白
2016-09-06
age是全局變量,所以兩次賦值都改變了同一內(nèi)存中的值,而name是局部變量,兩次改變不是同一內(nèi)存地址的值,取第一次賦值的值
2016-09-06
把dog類的第四行注釋掉
2016-09-06
把第四行注釋掉試試?