问题如下:
public class Test {
public String toString(){
return super.toString(); }
public static void main(String args[]){
System.out.println(new Test());
}
}
运行结果:Test@de6ced
public class Test {
public static void main(String args[]){
System.out.println(new Test());
}
}
运行结果:Test@de6ced
我产生的疑问是 第一个类打印的是其父类Object的地址吗?
如果是那么为什么第二个打印的地址和其父类一样。
我是这样想的 子类创建对象的时候需要调用父类的构造方法子类创建的同时父类也创建了,而且子类和父类分配同一个内存空间。不知道这样想对不对?
你可以看一下源码,在eclipse上,对准toString(),ctrl+鼠标左键,即可进入源码,看看toString的实现,
源码如下
return getClass().getName() + "@" + Integer.toHexString(hashCode());
“我产生的疑问是 第一个类打印的是其父类Object的地址吗?”
错。看来你对java还是不熟悉。Object类是所有类的父类。而你给出的两个类,其中一个重写了toString()方法,但是相当于没重写。因为Object类是所有类的父类,所以也是Test的父类。
如果你的类Test没重写toString的方法,则调用你父类(即Object)的toString方法。
如果你的类Test重写了toString方法,则调用重写的那个方法。
但是为什么说你重写了之后相当于没重写呢?因为你重写的方法还是调用了父类的toString方法!所以效果是一样的。
谢谢 我明白了 我是新手,因为super是父类的引用,所以我还以为super.tostring()是返回父类的hashcode
但是看你的那个toString()的源码 我明白了 getname() 和 hasCode都是子类的。 谢谢你。
类只是创建对象的模板,不管怎么继承创建的对象只有一个。
toString返回的@后面是对象的hashcode,内容(值)相同的对象hashcode相同。
super.toString()返回的是父类的hascode 吗?
@selience.:
应该这么说:super.toString()调用了父类的toString()方法,返回的是对象的hascode。
其实是调用了父类的toString()方法,而父类的toString()方法调用的hashcode是子类的