我想知道是否可以扩展超类的每个子类的构造函数参数。 例如:
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构造函数中的参数?
答案 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个答案所说,你需要调用一个超级构造函数(如果你不直接调用它,它将尝试调用没有参数的那个)。