亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

java繼承程序,答案為什么是:0?

java繼承程序,答案為什么是:0?

素胚勾勒不出你 2018-10-10 12:41:01
查看完整描述

2 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

我用了最笨的方法,new 一個對象的時候,實際是在jvm里面分配內存,初始化參數,基本參數為0,引用參數為null.并沒有賦值,從上面我們可以看到,new 子類先走父類構造,調text()時,子類重寫了所以走自己的text,此時的a并沒有賦值,所以輸出是0.但我完成對象的構建過后,再輸出a,此時已經賦值完成,輸出了6.這個都是JVM的一些東西,比較復雜

查看完整回答
反對 回復 2018-10-24
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

兄弟,我查了好久,
這個程序的執行順序是:建立子類sub的對象,接著調用父類的構造方法Super,Super中調用test方法,此時test方法調用的是子類的test方法,而不是Super類的,原因是建立的是子類的對象,這一點類似于Super s= new Sub(); s.test調用的就是子類的test方法;說完原因,這個是時候由于子類的構造方法還沒有執行,所以成員變量a還是默認值,int類型的默認值也就是0;此時父類的構造方法執行完畢,接下來執行子類的構造方法(子類的構造方法是系統默認的無參數的構造方法),這時候a的值才為6,所以,最后程序的輸出是0。
你可以建一個Sub引用去接收這個子類對象,然后打印出a,就會輸出6;
建一個Super引用去接收這個對象,打印a就可以輸出5.
查看完整回答
反對 回復 2018-10-24
  • 2 回答
  • 0 關注
  • 639 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號