問題如下:public class Test { public String toString(){ return super.toString(); } public static void main(String args[]){ System.out.println(new Test()); } }運行結果:Test@de6cedpublic class Test { public static void main(String args[]){ System.out.println(new Test()); } } 運行結果:Test@de6ced我產生的疑問是 第一個類打印的是其父類Object的地址嗎?如果是那么為什么第二個打印的地址和其父類一樣。我是這樣想的 子類創建對象的時候需要調用父類的構造方法子類創建的同時父類也創建了,而且子類和父類分配同一個內存空間。不知道這樣想對不對?
2 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
你可以看一下源碼,在eclipse上,對準toString(),ctrl+鼠標左鍵,即可進入源碼,看看toString的實現,
源碼如下
return getClass().getName() + "@" + Integer.toHexString(hashCode());
“我產生的疑問是 第一個類打印的是其父類Object的地址嗎?”
錯。看來你對java還是不熟悉。Object類是所有類的父類。而你給出的兩個類,其中一個重寫了toString()方法,但是相當于沒重寫。因為Object類是所有類的父類,所以也是Test的父類。
如果你的類Test沒重寫toString的方法,則調用你父類(即Object)的toString方法。
如果你的類Test重寫了toString方法,則調用重寫的那個方法。
但是為什么說你重寫了之后相當于沒重寫呢?因為你重寫的方法還是調用了父類的toString方法!所以效果是一樣的。

動漫人物
TA貢獻1815條經驗 獲得超10個贊
類只是創建對象的模板,不管怎么繼承創建的對象只有一個。
toString返回的@后面是對象的hashcode,內容(值)相同的對象hashcode相同。
添加回答
舉報
0/150
提交
取消