我需要从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
答案 0 :(得分:1)
也许您缺少对父类构造函数的显式调用?尝试将其添加为子类构造函数的第一行:
super(payload, next);
当父类没有可编译器自动调用的无参数构造函数时,这是必需的。这样可以确保父类正确初始化。
答案 1 :(得分:1)
这里:
public IntegerLinkedList(int payload, IntegerLinkedList next) {
那是Java编译器要在派生构造函数中调用的构造函数。请注意,它具有两个参数。
但是派生的构造函数具有三个参数。那么,编译器应该如何使用呢?
一个解决方案:将super(payload, next);
作为第一个语句放入该派生构造函数中。
重要的部分是 any 构造函数必须调用同一类中的另一个构造函数,或者调用超类构造函数。如果您没有进行该显式调用,则编译器将尝试为您插入一个。当事情加起来时,它不能做的事情。
有关其背后的理论,请参见here。