具有扩展参数的Java子类构造函数

时间:2016-02-04 12:41:07

标签: java

我想知道是否可以扩展超类的每个子类的构造函数参数。 例如:

public class Car{
protected String regNum;
protected Car(String regNum){
    this.regNum = regNum;
  }
}
public class GasCar extends Car{
protected double gasEmissions;
protected GasCar(double gE){
    gasEmissions = gE;
  }
}

有没有办法可以通过继承在GasCar构造函数中使用Car构造函数中的参数?

2 个答案:

答案 0 :(得分:2)

您是否尝试编译此代码?它不会编译,因为GasCar构造函数没有调用超级构造函数。

此外,您正在以错误的方式使用继承一词。参数不是继承的 - 方法是。并且构造函数永远不会被继承,因为它没有意义 - 当你子类化一个对象时,它需要它自己的构造函数

答案 1 :(得分:1)

简而言之:不是直接的,而是一种。您可能正在寻找的是对超级构造函数的调用,例如:

public class Car {

    protected String regNum;

    protected Car(String regNum) {
        this.regNum = regNum;
    }
}

public class GasCar extends Car {

    protected double gasEmissions;

    protected GasCar(String regNum, double gE) {
        super(regNum);
        gasEmissions = gE;
    }
}

请记住,调用超构造函数(或任何其他构造函数)是构造函数中需要做的第一件事。

编辑:正如其他2个答案所说,你需要调用一个超级构造函数(如果你不直接调用它,它将尝试调用没有参数的那个)。