我正在研究与继承相关的Java章节,我有几个问题。
我对继承的工作原理有基本的了解(覆盖方法、信息隐藏、如何在子类中使用超类的私有字段等),但我只有一个问题,希望你能帮助我。
当超类有非默认构造函数 - 没有参数时,这意味着在子类中我必须创建新的构造函数(它可以是默认的 - 没有参数),但在第一条语句中必须是超类构造函数调用。
好的,到目前为止一切顺利。到目前为止我明白了。在子类中,您必须调用超类构造函数,匹配任何构造函数参数。
但是让我们检查以下代码:(超类)
public class Vehicle {
private int numOfWheels;
private double avgGallonsPerMile;
public Vehicle(int numOfWheels, double avgGallonsPerMile) {
this.numOfWheels = numOfWheels;
this.avgGallonsPerMile = avgGallonsPerMile;
}
}
还有另一个子类代码:
public class Car extends Vehicle{
public Car(double avgGallonsPerMile) {
super(What should i write here?, avgGallonsPerMile);
//force numOfWheels to 4;
}
}
这是子类的练习:
每个子类都包含一个构造函数,该构造函数接受英里/加仑值作为参数,并将车轮数强制为适当的值——摩托车为 2,汽车为 4。
在子类构造函数中,我不需要numOfWheels 字段,因为无论如何我都会将其强制为 4(对于汽车)和 2(对于摩托车)。
但是我仍然需要超类的数据。从哪里获取这些数据?什么应该作为调用超类构造函数的第一个参数。
但这仍然不是孤例。我有很多练习,我不需要子类构造函数中的某些数据作为参数,但我仍然需要它们在超类构造函数调用中。
在这种情况下我该怎么办?
我真的希望你能理解我,我想说什么。这有点困难。