首页 新闻 会员 周边

java子类中调用父类重写的方法。

0
悬赏园豆:20 [已解决问题] 解决于 2013-01-17 10:04

问题如下:

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的地址吗?

如果是那么为什么第二个打印的地址和其父类一样。

我是这样想的 子类创建对象的时候需要调用父类的构造方法子类创建的同时父类也创建了,而且子类和父类分配同一个内存空间。不知道这样想对不对?

selience.的主页 selience. | 初学一级 | 园豆:136
提问于:2013-01-11 16:44
< >
分享
最佳答案
1

你可以看一下源码,在eclipse上,对准toString(),ctrl+鼠标左键,即可进入源码,看看toString的实现,

源码如下

return getClass().getName() + "@" + Integer.toHexString(hashCode());

 

“我产生的疑问是 第一个类打印的是其父类Object的地址吗?”

错。看来你对java还是不熟悉。Object类是所有类的父类。而你给出的两个类,其中一个重写了toString()方法,但是相当于没重写。因为Object类是所有类的父类,所以也是Test的父类。

如果你的类Test没重写toString的方法,则调用你父类(即Object)的toString方法。

如果你的类Test重写了toString方法,则调用重写的那个方法。

但是为什么说你重写了之后相当于没重写呢?因为你重写的方法还是调用了父类的toString方法!所以效果是一样的。

收获园豆:20
BaronZ | 菜鸟二级 |园豆:234 | 2013-01-14 16:23

谢谢  我明白了 我是新手,因为super是父类的引用,所以我还以为super.tostring()是返回父类的hashcode

但是看你的那个toString()的源码 我明白了 getname() 和 hasCode都是子类的。 谢谢你。 

selience. | 园豆:136 (初学一级) | 2013-01-17 10:03
其他回答(2)
0

类只是创建对象的模板,不管怎么继承创建的对象只有一个。

toString返回的@后面是对象的hashcode,内容(值)相同的对象hashcode相同。

向往-SONG | 园豆:4853 (老鸟四级) | 2013-01-11 17:45

super.toString()返回的是父类的hascode 吗?

支持(0) 反对(0) selience. | 园豆:136 (初学一级) | 2013-01-12 10:40

@selience.: 

应该这么说:super.toString()调用了父类的toString()方法,返回的是对象的hascode。

支持(1) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2013-01-12 10:55
0

其实是调用了父类的toString()方法,而父类的toString()方法调用的hashcode是子类的

仔仔~~ | 园豆:204 (菜鸟二级) | 2013-01-12 21:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册