教授向我们展示了在java中链表和节点的实现。节点从这个开始:
private class Node{
private T data;
private Node next;
private Node(T data){
this(data,null)
}
private Node(T dataP, Node nextN){
data = dataP;
next= nextN;
}
}
使用两个不同的构造函数的原因是什么?如果客户端愿意,他可以使用 Node null 调用第二个构造函数。教授说,这也不是为了让客户更容易。我知道如果您不提供默认构造函数,Java 会创建默认构造函数,但这真的是为了确保在这种情况下没有错误吗?如果是这样,在我们没有默认构造函数的情况下会出现什么错误?
有时,您希望在实例化对象时拥有更多的构造函数(重载(,以便于使用和可读性。即使构造函数不打算由其他类调用private
也可以由正在审查或维护该类的其他程序员再次查看或使用。
在您的情况下,Node(data)
是Node(data,null)
的简写,因为其他程序员可能不知道如何在没有定义next
的情况下实例化单个Node
。
拥有更多的构造函数对非private
类(public
、protected
或default
(更有帮助,因为其他程序员可能会扩展或重用你的类及其构造函数。具有其他构造函数可以允许不同的实例化方式。
不需要同时拥有两个构造函数。这可能只是你的教授给出的一个例子,两个构造函数,以及其中一个使用另一个的例子。
在您的示例中,new Node(someKindOfVariable, null)
使用第二个构造函数,与使用第一个构造函数new Node(someKindOfVariable)
相同。因此,没有必要拥有第一个构造函数。