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关于您需要包括/删除什么的回答。我的信心现在增强了。非常感谢你。