黑马程序员技术交流社区

标题: 关于方法重新的问题,请高手相助。 [打印本页]

作者: 乐凡    时间: 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