【发布时间】:2012-02-20 22:54:51
【问题描述】:
在构造函数链执行期间使用覆盖方法调用哪个方法?鉴于以下两个类,我需要知道在创建 MountainBike 对象时将调用哪个 setGear 方法。我真正的项目与自行车无关,我试图重写一个类来改变在超类的构造函数中调用的一个方法的行为,我不确定它应该如何工作......
public class Bicycle {
public int cadence;
public int gear;
public int speed;
public Bicycle(int startCadence,
int startSpeed,
int startGear) {
setGear(startGear);
setCadence(startCadence);
setSpeed(startSpeed);
}
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
public class MountainBike extends Bicycle {
public int seatHeight;
public MountainBike(int startHeight,
int startCadence,
int startSpeed,
int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
public void setHeight(int newValue) {
seatHeight = newValue;
}
public void setGear(int newValue) {
if(newValue<4)
gear = newValue;
else{
gear = 4;
}
}
}
【问题讨论】:
-
setGear 方法根本没有被调用。也许你想在你的构造函数中调用它?
-
我的错...它应该在 Bicycle 类的构造函数中调用...假设在 Bicycle 类构造函数中使用 setGear 来设置齿轮属性 - 修复了示例代码。 ..
-
@Steve 编写一个简单的测试并亲自看看 Java 做了什么非常容易...
-
@AndresF。是的,你是对的,但这不会帮助我理解为什么我会看到我看到的结果,如果我在我的代码中做错了什么也不会帮助我,因为我不确定它应该如何开始工作。跨度>
-
感谢您的帮助,但我找到了一个更好的例子,其中包含我正在寻找的答案...stackoverflow.com/questions/4595512/…我想我应该在提问之前花更多时间搜索...
标签: java methods constructor chain overriding