如何从自定义LinkedList类继承?

时间:2019-04-16 18:35:02

标签: java linked-list nodes

我需要从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;
    }

我也为每个班级中的每个领域都有设置方法和方法。

错误消息:

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

2 个答案:

答案 0 :(得分:1)

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

super(payload, next);

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

答案 1 :(得分:1)

这里:

public IntegerLinkedList(int payload, IntegerLinkedList next) {

那是Java编译器要在派生构造函数中调用的构造函数。请注意,它具有两个参数。

但是派生的构造函数具有三个参数。那么,编译器应该如何使用呢?

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

重要的部分是 any 构造函数必须调用同一类中的另一个构造函数,或者调用超类构造函数。如果您没有进行该显式调用,则编译器将尝试为您插入一个。当事情加起来时,它不能做的事情。

有关其背后的理论,请参见here