错误:A类中的构造函数A无法应用于给定类型

时间:2015-03-16 22:17:48

标签: java subclass

public class A{

    public A(String x){
        System.out.println("A constructor Called "+x);
    }
     public static void main(String []args){
        System.out.println("Hello World");
        A a= new B("b");
     }
}

class B extends A{
    public B(String x){
        System.out.println("B constructor Called "+x);
    }
}

这个非常简单的程序有什么问题,我无法找到它。 在编译时出现以下错误:

A.java:13: error: constructor A in class A cannot be applied to given types;                                                                                                    
    public B(String x){                                                                                                                                                         
                      ^                                                                                                                                                         
  required: String                                                                                                                                                              
  found: no arguments                                                                                                                                                           
  reason: actual and formal argument lists differ in length  

3 个答案:

答案 0 :(得分:4)

由于A类没有默认构造函数,因此需要告诉B类如何构造其父类:

class B extends A{
    public B(String x){
        super(x);  // this constructs the parent class
        System.out.println("B constructor Called "+x);
    }
}

错误告诉您必须调用的构造函数需要一个字符串:

  

必需:字符串

...但是你正在调用的那个(因为你没有调用super,这是默认的构造函数)没有参数:

  

发现:没有参数

答案 1 :(得分:3)

您需要调用super构造函数:

public B(String x){
    super(x);
    System.out.println("B constructor Called "+x);
}

通常,对默认的无参数构造函数进行隐式调用,但A没有其中一个。编写super(x);将调用public A(String x) ...构造函数,这是A类中唯一可用的构造函数。

答案 2 :(得分:0)

只需添加更多。
如果您将在父类中编写no-argumnet构造函数,则不会显示错误。因为默认情况下,super()调用发生在构造函数内部。因此,当调用父类构造函数时,在父类中没有获取no-argumnet构造函数。