子クラスのメソッドが親クラスの同じシグネチャのメソッドをオーバーライドしないのはなぜですか?
概要:
抽象クラス Actor を拡張するPlayerPaddle抽象クラスを拡張するクラスがあります (ここでのコンテキストはピンポン ゲームです)。どちらも同じシグネチャを持つメソッドを持っています。PaddlePaddlePlayerPaddle
public void moveDown()
その意図は、メソッドが のPlayerPaddle moveDownメソッドをオーバーライドすることですPaddle。ここでの問題は、this.moveDown()内部で呼び出すときに、のメソッドPlayerPaddleのみが呼び出されることです。moveDownPaddle
詳細:
で設定されたブレークポイントmoveDown()はPaddleトリップしますが、でオンのブレークポイントmoveDown()はPlayerPaddle決してトリップしません。メソッドも試し@OverrideてみましたPlayerPaddle moveDownが、それでもPaddle moveDownメソッドを呼び出します。
コンテキスト:
目標は、PlayerPaddleオブジェクトが他のオブジェクトとは異なる速度で上下に移動することPaddleです。したがって、moveUpメソッドでも同じ問題が発生します。
以下のコード:
abstract public class Actor {
public void releasedEvent(KeyEvent e) {
}
}
abstract public class Paddle extends Actor {
public void moveDown() { // this method is called
body.setVel(0, Game.dX / 10.);
}
}
public class PlayerPaddle extends Paddle {
@Override
public void moveDown() { // this method never gets called
body.setVel(0, Game.dX );
}
public void receiveEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
this.moveUp();
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
this.moveDown(); // Want to call moveDown() inside PlayerPaddle
}
}
}
喜んで説明させていただきます。