java中Object的toString方法

用增强for循环遍历集合的所有值时,
这里的toString方法应该是Object中的原始toString方法,输出对象名和哈希值才对;
结果输出是按照重写后的方法,那这个toString是调用哪里的呢?

public class keySettest {
    public static void main(String[] args) {
        HashMap table = new HashMap();
        table.put("jack", new Student("jack", 12));
        table.put("tome", new Student("tome", 12));
        table.put("lucy", new Student("lucy", 12));
        Collection values = table.values();
        //增强for循环遍历集合的所有值
        for (Object object : values) {
            System.out.println(object);
            //循环输出object类型的变量,应该是调用toString方法
            //这里的toString方法应该是Object中的原始toString方法,输出对象名和哈希值才对
            //结果输出是按照重写后的方法,那这个toString是调用哪里的呢?
        }
    }
}


这里的toString方法应该是Object中的原始toString方法===这不对吧。values中的对象都是Student类,这个类是不是有toString方法?第10行应该调用的是Student类的toString。多态性会自动调用子类的重载函数

在Java中,当我们使用System.out.println()方法输出一个对象时,会自动调用该对象的toString()方法来获取其字符串表示形式。在上面的代码中,当使用System.out.println(object)输出对象时,实际上是调用了Student类中重写后的toString()方法。

在Java中,所有的类都是从Object类继承而来的。Object类中有一个toString()方法,其默认实现返回的是对象的哈希值。但是,子类可以重写该方法,以提供更有用的信息。在上面的代码中,Student类重写了toString()方法,以返回学生的姓名和年龄等信息,而不是对象的哈希值。

因此,在使用增强for循环遍历集合中的元素时,当输出一个对象时,实际上是调用该对象的toString()方法。在上面的代码中,当输出一个Student对象时,实际上是调用该对象所属的Student类中重写后的toString()方法,以获取学生的姓名和年龄等信息。

如果帮您解决问题,麻烦点一下采纳