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
// 结果为什么不是地址值?


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

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

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

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

默认调用了toString