【发布时间】:2013-05-10 04:25:29
【问题描述】:
为什么我的子类方法没有覆盖其父类中相同签名的方法?
总结:
我有一个类PlayerPaddle,它扩展了一个抽象类Paddle,它扩展了抽象类Actor(这里的上下文是一个乒乓球游戏)。 Paddle 和 PlayerPaddle 都有一个签名相同的方法:
public void moveDown()
目的是让PlayerPaddle moveDown 方法覆盖Paddle 的方法。这里的问题是当我在PlayerPaddle 中调用this.moveDown() 时,只调用了Paddle 的moveDown 方法。
详情:
在Paddle 中设置在moveDown() 上的断点被触发,而在PlayerPaddle 中moveDown() 上的断点永远不会触发。我还在PlayerPaddle moveDown 方法上尝试了@Override,但它仍然调用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
}
}
}
我很乐意提供澄清。
【问题讨论】:
-
看起来应该可以了。您是如何确定调用了哪个方法的?
-
尝试记录一条消息(即使是
System.out.println()也可以)。这可能比尝试使用调试器跟踪您的位置更可靠。无论如何对我来说效果更好...... -
如需尽快获得更好的帮助,请发帖SSCCE。
-
在你实际调用方法的地方显示你的代码
-
如果这不起作用,Java 就不会是多态的。它是什么...
标签: java inheritance