引子
我现在有一个Student类
创建一堆Student对象,把它们放进Student数组中
现在我想输出这些Student对象的信息,我们正常想到的方式是这样的
但是每次输出都要在 System.out.println() 函数中写这么长的代码好麻烦,而且如果想要添加新属性的话需要找到这些输出一个一个改,有没有什么办法能一劳永逸的解决这个问题呢
解决
我们都知道 Object 类是所有类的父类,而 System.out.println() 底层输出的是Object对象中 toString() 方法的返回值
我们只需要在 Student 类中重写这个 toString() 方法,使其返回值变为想要输出的信息, 如下
这样,我们输出时就可以直接把 对象 放进 System.out.println()了,如下图:
输出结果如下:
底层源码
先看 System.out.println() 的源码
发现其输出的值为String.valueOf()方法的返回值
接着,我们点开 String.valueOf() 的源码
发现其调用的是 Object对象 的 toString() 方法
继续点开
由于 Object类 是所有 引用数据类型(类) 的父类,
根据 多态 规则:子类可以重写父类的 非 private 的、非 fianl 的方法
我们通过 重写Object类的toString()方法 即可控制System.out.println()的输出值