我只是在试验抽象类并遇到错误。
我有一个班级:
public abstract class C {
String aname;
int aid;
public C(String s, int n) {
aname = s;
aid = n;
}
public static void main(String[] args) {
System.out.println("Hello");
}
}
现在,另一个类扩展如下:
public class D extends C {
public static void main(String[] args) {
}
}
但是,它会出现以下错误:
error: constructor C in class C cannot be applied to given types;
public class D extends C {
^
required: String,int
found: no arguments
reason: actual and formal argument lists differ in length
答案 0 :(得分:1)
由于类D
未定义任何构造函数,编译器会自动为其创建默认无参数构造函数。但是,此构造函数隐式调用未定义的基类C
的无参数构造函数 - 如果明确定义一个或者未定义任何构造函数,则存在无参数构造函数。要解决它,您可以为C
定义一个无参数构造函数:
public C() {
}
或者您可以在D
中定义一个与父类具有相同参数的构造函数:
public D(String s, int n) {
super(s, n);
}
答案 1 :(得分:0)
这与abstract
类和方法无关,而且与您在D
中没有声明构造函数的事实有关。
C
中只有一个构造函数,它需要2个参数。您没有在D
中声明构造函数,因此Java隐式插入no-arg, default constructor。它调用超类的默认(no-arg)构造函数,但C
中不存在。
您必须明确创建一个D
构造函数,该构造函数调用C
的2-arg构造函数或在C
中提供无参数构造函数。
答案 2 :(得分:0)
您只在抽象类中有一个参数化构造函数。尝试使用显式默认构造函数或覆盖子文件中的构造函数。