問題如下:public class Test { public String toString(){ return super.toString(); } public static void main(String args[]){ System.out.println(new Test()); } }運行結(jié)果:Test@de6cedpublic class Test { public static void main(String args[]){ System.out.println(new Test()); } } 運行結(jié)果:Test@de6ced我產(chǎn)生的疑問是 第一個類打印的是其父類Object的地址嗎?如果是那么為什么第二個打印的地址和其父類一樣。我是這樣想的 子類創(chuàng)建對象的時候需要調(diào)用父類的構(gòu)造方法子類創(chuàng)建的同時父類也創(chuàng)建了,而且子類和父類分配同一個內(nèi)存空間。不知道這樣想對不對?
2 回答
守候你守候我
TA貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊
你可以看一下源碼,在eclipse上,對準(zhǔn)toString(),ctrl+鼠標(biāo)左鍵,即可進(jìn)入源碼,看看toString的實現(xiàn),
源碼如下
return getClass().getName() + "@" + Integer.toHexString(hashCode());
“我產(chǎn)生的疑問是 第一個類打印的是其父類Object的地址嗎?”
錯??磥砟銓ava還是不熟悉。Object類是所有類的父類。而你給出的兩個類,其中一個重寫了toString()方法,但是相當(dāng)于沒重寫。因為Object類是所有類的父類,所以也是Test的父類。
如果你的類Test沒重寫toString的方法,則調(diào)用你父類(即Object)的toString方法。
如果你的類Test重寫了toString方法,則調(diào)用重寫的那個方法。
但是為什么說你重寫了之后相當(dāng)于沒重寫呢?因為你重寫的方法還是調(diào)用了父類的toString方法!所以效果是一樣的。
動漫人物
TA貢獻(xiàn)1815條經(jīng)驗 獲得超10個贊
類只是創(chuàng)建對象的模板,不管怎么繼承創(chuàng)建的對象只有一個。
toString返回的@后面是對象的hashcode,內(nèi)容(值)相同的對象hashcode相同。
添加回答
舉報
0/150
提交
取消
