1

子クラスのメソッドが親クラスの同じシグネチャのメソッドをオーバーライドしないのはなぜですか?

概要:

抽象クラス 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
       }
    }

}

喜んで説明させていただきます。

4

1 に答える 1