黑马程序员技术交流社区
标题:
关于方法重新的问题,请高手相助。
[打印本页]
作者:
乐凡
时间:
2012-8-20 16:25
标题:
关于方法重新的问题,请高手相助。
package cn.itcast;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "name:"+name+"age:"+age;
}
}
package cn.itcast;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Map {
public static void main(String[] args) {
HashMap<Integer,Student> hm = new HashMap<Integer,Student>();
Student s1 = new Student();
s1.setName("张惠妹");
s1.setAge(20);
Student s2 = new Student();
s2.setName("张惠妹");
s2.setAge(20);
Student s3 = new Student();
s3.setName("张惠妹");
s3.setAge(20);
hm.put(1, s1);
hm.put(2, s2);
hm.put(3, s3);
System.out.println(hm);//我在Student类里重写了toString方法,为什么hm对象不用调用此方法,这个方法就直接应用了啊,不应该是(hm.toString)吗?这里不解啊 求高手相助!
}
}
作者:
金龙
时间:
2012-8-20 16:30
因为,打印语句中,hm是默认调用的toString方法。所以直接就显示了。
作者:
王少岩
时间:
2012-8-20 16:43
本帖最后由 王少岩 于 2012-8-20 16:46 编辑
println()的源码:
PrintStream(System.out):
public void println(Object x) {
String s = String.valueOf(x);//
调用
String.valueOf(obj)方法
synchronized (this) {
print(s);
newLine();
}
}
String:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();//
如果obj不为空的话,调用object类的toString()方法
}
Object:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
在
楼主
代码中覆盖了toString方法,所以调用的是覆盖后的toString方法,打印的结果就是toString方法的返回结果。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2