【问题标题】:How do I inherit from a custom LinkedList class?如何从自定义 LinkedList 类继承?
【发布时间】:2019-04-16 18:35:02
【问题描述】:

我需要从 IntegerLinkedList 继承,同时还要创建一个特定于 StringAndIntegerLinkedList 的新变量。我错过了什么?

class IntegerLinkedList {
    int payload;
    IntegerLinkedList next;

    public IntegerLinkedList(int payload, IntegerLinkedList next) {
        this.payload = payload;
        this.next = next;
    }

    class StringAndIntegerLinkedList extends IntegerLinkedList {
        String stringPayload;

    public StringAndIntegerLinkedList(String stringPaylod, int payload, IntegerLinkedList next) {
        this.stringPayload = stringPaylod;
        this.payload = payload;
        this.next = next;
    }

我还为每个类中的每个字段设置了 setter 和 getter。

错误信息:

StringAndIntegerLinkedList.java:4: error: constructor IntegerLinkedList in class IntegerLinkedList cannot be applied to given types;
    public StringAndIntegerLinkedList(String stringPaylod, int payload, IntegerLinkedList next) {
                                                                                                ^
  required: int,IntegerLinkedList
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error

【问题讨论】:

    标签: java linked-list nodes


    【解决方案1】:

    这里:

    public IntegerLinkedList(int payload, IntegerLinkedList next) {
    

    这是 java 编译器想要从派生构造函数中调用的构造函数。请注意,它有两个参数。

    但是派生的构造函数有三个参数。那么编译器现在应该如何使用哪一个!

    一种解决方案:将super(payload, next); 作为第一条语句放入派生构造函数中。

    重要的部分是 any 构造函数必须要么调用同一个类中的另一个构造函数,要么调用超类构造函数。如果您省略了该显式调用,编译器会尝试为您插入一个。当事情不加起来时,它不能做到这一点。

    有关其背后的理论,请参阅 here 示例。

    【讨论】:

      【解决方案2】:

      也许您缺少对父类构造函数的显式调用?尝试将其添加为子类构造函数的第一行:

      super(payload, next);
      

      当父类没有编译器可以自动调用的无参数构造函数时,这是必需的。这样可以确保正确初始化父类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-17
        • 2015-06-20
        • 2023-03-27
        相关资源
        最近更新 更多