为什么我的子类方法不会覆盖其父类中相同签名的方法?
我有一个类PlayerPaddle
,它扩展了一个抽象类Paddle
,它扩展了抽象类Actor(这里的上下文是一个乒乓游戏)。 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
}
}
}
我很乐意提供澄清。
答案 0 :(得分:4)
看到简单的情况,它有效:
public class Test{
public static void main(String args[])
{
new PlayerPaddle().receiveEvent();
}
}
abstract class Actor {
public void releasedEvent(KeyEvent e) {
}
}
abstract class Paddle extends Actor {
public void moveDown() { // this method is called
System.out.println("paddle");
}
}
class PlayerPaddle extends Paddle {
@Override
public void moveDown() { // this method never gets called
System.out.println("playerpaddle");
}
public void receiveEvent() {
this.moveDown(); // Want to call moveDown() inside PlayerPaddle
}
}
它调用PlayerPaddle。