在子类中定义与超类构造函数不同的构造函数?

时间:2016-02-01 11:30:18

标签: java inheritance constructor

我在家庭作业上遇到了这个奇怪的问题。下面是一个班级声明。

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

但我需要这个构造函数不同。我怎么能这样做?

3 个答案:

答案 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不再具有默认无参数   构造函数,如果您没有,则由编译器创建   在类中定义的构造函数