Java 扩展抽象类时出错
我只是在试验抽象类,但遇到了一个错误 我有一门课是:Java 扩展抽象类时出错,java,Java,我只是在试验抽象类,但遇到了一个错误 我有一门课是: 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 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
由于类
D
没有定义任何构造函数,编译器会自动为它创建一个默认的无参数构造函数。但是,此构造函数隐式调用基类C
的无参数构造函数,该构造函数未定义——如果显式定义了无参数构造函数或未定义任何构造函数,则存在无参数构造函数。要解决此问题,您可以为C
定义一个无参数构造函数:
public C() {
}
或者,您可以在D
中定义与父类参数相同的构造函数:
public D(String s, int n) {
super(s, n);
}
这与
abstract
类和方法无关,而与您没有在D
中声明构造函数这一事实有关
在C
中只有一个构造函数,它需要两个参数。您没有在D
中声明构造函数,因此Java隐式地插入了一个构造函数。它调用超类的默认(无参数)构造函数,但在C
中不存在该构造函数
必须显式创建调用
C
的2-arg构造函数的D
构造函数,或者在C
中提供无arg构造函数。只有在抽象类中才有参数化构造函数。尝试使用显式默认构造函数或重写子类中的构造函数。请注意,我选择了不使用任何抽象方法。由于您只有一个带有两个参数的构造函数C(String s,int n)
,Java抱怨它需要D
将这些参数传递给它的超类(C
),如何修复它?我的意思是不添加一个没有参数的新构造函数,就像它只有提供的构造函数一样。我如何扩展它?检查manouti关于您需要包括/删除什么的回答。我的信心现在增强了。非常感谢你。