关于在 Class(数据 class 或 POJO)中覆盖 toString() 方法并调用 list.toString() 的混淆?

Confusion regarding Overriding toString() method in a Class(Data class or POJO) and calling list.toString()?

我有这种实现方式

static class InnerClassStudent{
        String name;
        int age;

        InnerClassStudent(String name,int age){
            this.name = name;
            this.age = age;
        }


        @Override
        public String toString() {
            return "name :" + name + "," + "age: " + age;
        }
    }

然后我在列表中创建、添加和打印项目。

List<InnerClassStudent> listOfInnerClassStudent = new ArrayList<InnerClassStudent>();

//add items

//print items
 System.out.println("InnerClasslist : " + listOfInnerClassStudent.toString());

那么输出就是

InnerClasslist : [name :Mr.B,age: 21, name :Mr.Y,age: 19, name :Mr.C,age: 30]

所以,这里我对 toString() 方法有些困惑。 我正在调用 list.toString(),这意味着 toString() 需要是 List class 或其父级 class.[= 内部的函数17=]

所以,它的实际实现是在Object.java

  public String toString() {
        return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
    }

所以,我的问题和困惑是,当我 Override 我需要的 class 中的 toString() 时,它是如何一起工作来打印 List Of Overridden toString() 方法中相应提到的项目。

我希望我已经把我的问题说清楚了。谢谢。

ArrayList 有自己的 toString 实现,继承自 AbstractCollection

public class ArrayList<E> extends AbstractList<E>

AbstractList 定义,

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> 

,

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }