我正在实现双向链表,下面是我的代码段。
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/