我在家庭作业上遇到了这个奇怪的问题。下面是一个班级声明。
public class A {
private String str;
private int num;
public A ( String str, int num ) {
this.str = str;
this.num = num;
}
现在我需要一个继承自A类的子类的实现,但是有一个不同的构造函数,如下所示:
public class B extends A {
private String str1;
public B ( String str, String str1 ) {...}
// this is where the editor shows an error because class B constructor arguments are
// different from the arguments in the class A constructor
但我需要这个构造函数不同。我怎么能这样做?
答案 0 :(得分:2)
您需要显式调用超级构造函数:
public class B extends A {
private String str1;
public B ( String str, String str1 ) {
super(str,0);
//do what you want...
}
答案 1 :(得分:2)
首先,您的Base类具有自定义构造函数但没有默认值,这将导致编译错误。派生类将在派生类构造函数的第一行调用基类的隐式默认构造函数,或者您可以根据需要调用必要的基础构造函数(super(..)),之后调用下一个构造函数体。 因此,拥有不同的构造函数并不成问题。
答案 2 :(得分:1)
您必须使用super()
声明:
public B ( String str, String str1 ) {
//0 is the second int argument of the class A constructor
super(str, 0);
//do something with the str1
}
因为您的班级
A
不再具有默认无参数 构造函数,如果您没有,则由编译器创建 在类中定义的构造函数