扩展抽象类时出错

时间:2015-03-09 19:36:56

标签: 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 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

3 个答案:

答案 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)

您只在抽象类中有一个参数化构造函数。尝试使用显式默认构造函数或覆盖子文件中的构造函数。