子クラスのメソッドが親クラスの同じシグネチャのメソッドをオーバーライドしないのはなぜですか?
概要:
抽象クラス Actor を拡張するPlayerPaddle
抽象クラスを拡張するクラスがあります (ここでのコンテキストはピンポン ゲームです)。どちらも同じシグネチャを持つメソッドを持っています。Paddle
Paddle
PlayerPaddle
public void moveDown()
その意図は、メソッドが のPlayerPaddle
moveDown
メソッドをオーバーライドすることですPaddle
。ここでの問題は、this.moveDown()
内部で呼び出すときに、のメソッドPlayerPaddle
のみが呼び出されることです。moveDown
Paddle
詳細:
で設定されたブレークポイント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
}
}
}
喜んで説明させていただきます。