子类方法不会覆盖父级中相同签名的方法

时间:2013-05-10 04:25:29

标签: java inheritance

为什么我的子类方法不会覆盖其父类中相同签名的方法?

要点:

我有一个类PlayerPaddle,它扩展了一个抽象类Paddle,它扩展了抽象类Actor(这里的上下文是一个乒乓游戏)。 PaddlePlayerPaddle都有一个具有相同签名的方法:

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
       }
    }

}

我很乐意提供澄清。

1 个答案:

答案 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。