【问题标题】:Why should we use 2 constructors when implementing Linked List?为什么我们在实现链表时要使用 2 个构造函数?
【发布时间】:2018-04-18 18:15:27
【问题描述】:

教授向我们展示了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 为空的第二个构造函数。教授说这也不是为了让客户更容易。我知道如果您不提供默认构造函数,Java 会创建默认构造函数,但这真的是为了确保在这种情况下没有错误吗?如果是这样,在我们没有默认构造函数的情况下会出现什么错误?

【问题讨论】:

  • 谢谢,这很有帮助。 @ElliottFrisch 我想我可以在这里获得更多见解。
  • 教授好像举了两个构造函数的例子,其中第一个使用第二个构造函数代码。
  • 这只是一个重载的例子。你不需要这样做(在某些语言中你不能这样做)。使用您喜欢的搜索引擎了解更多信息。

标签: java data-structures linked-list nodes default-constructor


【解决方案1】:

有时,您希望在实例化对象时拥有更多构造函数(重载)以方便和可读性。尽管 private 构造函数不打算被其他类调用,但它可能会被正在审查或维护该类的其他程序员再次查看或使用。

在您的情况下,Node(data)Node(data,null) 的简写,因为其他程序员可能不知道如何在未定义 next 的情况下实例化单个 Node

拥有更多构造函数对非private 类(publicprotecteddefault)更有帮助,因为其他程序员可能会扩展或重用您的类及其构造函数。拥有额外的构造函数可以允许不同的实例化方式。

【讨论】:

    【解决方案2】:

    没有必要同时拥有两个构造函数。这可能只是您的教授给出的两个构造函数的示例,以及其中一个使用另一个构造函数的示例。
    在您的示例中,new Node(someKindOfVariable, null) 使用第二个构造函数,与 new Node(someKindOfVariable) 使用第一个构造函数相同。所以没有必要拥有第一个构造函数。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2023-04-09
      • 2011-02-04
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 2018-02-19
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多