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
答案 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构造函数。