调用super方法时忽略子类方法代码

时间:2015-03-07 14:00:10

标签: java inheritance methods

我正在使用基于文本的输入创建程序。 每次收到输入时,都会有使用JFrame的基于文本的(系统打印)输出和图形表示输出。

我的课程Player扩展了UiPlayer

UiPlayer中的方法控制UI 2D地图周围的玩家。 Player中的方法更改变量以显示基于文本的输出。 Player中的相关代码:

public class Player extends UiPlayer
{
  private MyDirection facing;

  public Player(.....)   //irrelevant arguments
  {
    super(.....);
    facing = MyDirection.EAST;
  }


  /**
  *  make the player turn right, both in text and in GUI window
  */
  public void turnRight()
  {
    super.turnRight();
    if(facing == MyDirection.NORTH)
    {facing = MyDirection.EAST;} 
    else if(facing == MyDirection.WEST)
    {facing = MyDirection.NORTH;}
    else if(facing == MyDirection.SOUTH)
    {facing = MyDirection.WEST;}
    else
    {facing = MyDirection.SOUTH;}
  }

  /**
  * make the player turn 180 degrees, both in text and on graphics window
  */
  public void turnAround()
  {
    super.turnAround();
    if(facing == MyDirection.NORTH)
    {facing = MyDirection.SOUTH;}
    else if(facing == MyDirection.WEST)
    {facing = MyDirection.EAST;}
    else if(facing == MyDirection.SOUTH)
    {facing = MyDirection.NORTH;}
    else
    {facing = MyDirection.WEST;}
}

但是,出于某种原因,虽然turnRight()turnLeft()完美无缺,但是当调用turnAround()时,如果它包含调用super方法,则调用super方法,播放器转向在GUI和所有其他代码中更改基于文本的方向(即facing)似乎被忽略。

如果我不包含超级方法,facing的值每次都会完美地改变。

我尝试重命名方法,并将super.turnAround()放在if语句之后。

编辑:另外,我无法访问UiPlayer的代码,我只有方法文档。它声明了|无效| turnAround()|转动播放器使其面向相反的方向。

有什么想法吗? ><

1 个答案:

答案 0 :(得分:0)

如果我是你,,你无法让turnAround工作,你无法修复代码和课程,看看是什么正好进行,

如果您考虑一下,我会打电话给两次 turnLeftturnRight,这基本上是turnAround

它不是一种超级优化的方式来处理它或其他什么,但它应该可以解决你的问题:)