java - 为什么会自动调用内部类的重写方法?

标签 java class doubly-linked-list

我正在实现双向链表,下面是我的代码段。

public class DoublyLinkedList {

private Node head = null;
private Node tail = null;
private int size = 0;

private class Node{

    private Object data;
    private Node next;
    private Node previous;

    private Node(Object input) {
       this.data = input;
       this.next = null;
       this.previous = null;
    }// Node.Constructor

    public String toString() {
        return String.valueOf(this.data);
    }

  }// class Node

  public Node node(int k) {
      Node x = head;
      for(int i = 0; i < k; i++) {
         x = x.next;
      }
    return x; 
  }// DoublyLinkedList.node
}// class DoublyLinkedList

public static void main(String[] args) {

    DoublyLinkedList l = new DoublyLinkedList();
    l.addFirst(3);
    l.addFirst(4);
    l.addFirst(5);
    l.addFirst(6);
    System.out.println(l.node(0));
    System.out.println(l.node(1));
    System.out.println(l.node(2));
    System.out.println(l.node(3));
}

在这段代码中,Node 类中没有 toString 方法,node 方法返回第 k 个节点的地址。然而,使用这个 toString 方法,它返回第 k 个节点包含的数据,尽管我从未调用过这个方法。为什么内部类的这个方法会被自动调用呢?

最佳答案

您可以在调试器中查看或稍微修改一下代码,看看发生了什么......

DoublyLinkedList l = new DoublyLinkedList();
l.addFirst(3);
Node n0 = l.node(0)
System.out.println(n0);

System.out.println(Object obj) 的实现是

public void print(Object obj) {
    write(String.valueOf(obj));
}

String.valueOf(Object obj)

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

...然后调用您的 toString() (如果已定义)或 java.lang.Object 类中的默认值

关于java - 为什么会自动调用内部类的重写方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661422/

相关文章:

java - 将哈希码转换为有限的字符串集

java - 选择数据库服务 - mongohq vs dynamodb

ios - 有没有什么工具可以帮助我分析我的 Objective-C 项目的类结构?

c++ - 计算成员值时 vector 的奇怪问题

c - 向双向链表添加元素

java - 二进制转十进制并翻转0和1 JAVA

java - Spring中的POST方法不接受application/json

asp.net - 仅具有共享函数的类 - 为什么它不好?

python - 长双链表

javascript - 垃圾收集是否使用给定代码从双向链表中删除已删除的项目?