问题如下: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
提交
取消