2 scabc5501 scabc5501 于 2016.03.13 11:20 提问

Java>Object>toString()

List list = new ArrayList();
list.add(0, "hello");
list.add(1, "world");
list.add(2, "javase");
Object object = list.get(2);
System.out.println(object); // android
// 结果为什么不是地址值?


5个回答

cxsmarkchan
cxsmarkchan   2016.03.13 11:36

"javase"是一个String对象,String对象重写了toString()函数,所以执行的不是Object.toString,而是String.toString。
java的多态思想决定了,即使你用一个Object引用指向这个String变量,执行toString函数,调用的仍然是String.toString。

luochoudan
luochoudan   Ds   Rxr 2016.03.13 15:20

java语言中的多态实现。String继承了Object;String同时重写了Object的toString()方法;父类对象object指向了子类String。同时满足了这三个条件。所以运行的时候,它会调用String的toString()方法。

friendly_6
friendly_6   2016.07.31 16:29

object指向一个String对象,所以object的声明类型是Object,实际类型是String。
println(object),Java默认调用object的toString(),由于多态的缘故(String继承自Object),
调用String类中的toString()方法而非Object类中的toString()方法。

sunrise_zhu
sunrise_zhu   2016.08.05 00:39

其实也不用那么复杂,你打的代码可以简化成:
Object object = "javase";
syso(object);
这两段代码的意思是:
String str = "javase";
syso(str);
原因是String类继承自Object类,这个有涉及到多态的概念
Object object = "javase";术语叫父类引用指向子类对象,而当你syso(object)时,
它会先去它的子类找toString方法,如果有就用子类的toString(),没有才调用父类(object)toString()
这就是为什么会输出字符串而非hash码值得原因!

guanjun_12
guanjun_12   2017.12.10 11:22

默认调用了toString

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!