我建议你先看看jjdqd的源代码
之所以简单地调用toString (方法,是因为编译器调用了out.print )方法,而不是缺省编译器
仔细看源代码,在PringStream类中,print方法写为
公共void print (objectobj ) {
write(string.valueof(obj ) );
}
此时,调用了String的静态方法valueof
这个方法是这样的
publicstaticstringvalueof (objectobj ) {
return(obj==null )? ' null' : obj.toString (; //请注意。 这里调用了toString方法
}
所有java对象都是从Object派生的,如果方法未被重写
将调用super.toString ()
在Object中,这个方法是这样定义的
公共字符串
return getClass ().getName () ' @'integer.tohexstring ) hashcode ) );
}
因此,打印结果为classname @hashcode
重写toString方法后,根据java的动态绑定原理,调用当前对象的toString () )方法,因此奋斗的树叶在重写student的toString方法后
学号:1
姓名:dpdbb
补充一点:
作为比较,调用print(strings )时,虽然是同一对象,但不会调用toString )方法,打印结果也不再是java.lang.String@hashcode