我有一个抽象类Moveable ,它具有abstract void move()方法,该方法由类Bullet 抽象类Character 扩展,而字符类Survivor 和扩展。在 Survivor Bullet 中,move()方法不需要任何参数,而在Zombie类中,move()方法取决于幸存者的实际位置。在类Gui 中创建了幸存者和多个僵尸。

我想访问中的幸存者Zombie -最好的方法是什么?在 Gui 中,我编写了一种方法getSurvivor(),但是我看不到如何在中访问此方法?Zombie 吗?

我知道,作为一种解决方法,我可以在move()中传递[ Survivor survivor]作为参数,并在 Bullet Survivor 中将其忽略,但这感觉很糟糕。

最佳答案

这取决于您的幸存者在哪里。您的僵尸将需要从某个地方引用幸存者的信息-它需要做什么?谁应负责提供此信息?

听起来您的Gui实际上做得太多,我希望有一个名为GameState的类来管理位置,然后让Gui来处理输出。无论如何,如果只有一个幸存者,您可以在Gui / Gamestate上简单地使用getSurvivor()方法-僵尸可能应该引用其所属的当前游戏状态。或者,您可以将GameState设为单例,而Zombies可以通过这种方式访问​​它。

编辑:针对您的评论,也许是这样的:

public class Zombie
{
   private final Gui guiThatMadeMe;

   public Zombie(Gui owner)
   {
      guiThatMadeMe = owner;
   }

   ....

   public void move()
   {
      Survivor guy = guiThatMadeMe.getSurvivor();

      // Do whatever you need to with the survivor
   }
}


public class Gui
{
   private Survivor lonelyGuy;

   ...

   public Survivor getSurvivor()
   {
      return lonelyGuy;
   }

   public void createNewGame() // I'm guessing you have some method like this
   {
       lonelyGuy = new Survivor();
       for (int i = 0; i < NUM_ZOMBIES; i++)
       {
          Zombie zombie = new Zombie(this); // pass in this reference
          // Do something with the zombie
       }
       // other setup
   }
}

无论如何,僵尸将不得不获得对知道如何获得幸存者的东西的参考。另一种选择是将幸存者直接传递到僵尸中,但是感觉不那么干净。如果僵尸必须始终只有一个幸存者,而这恰好是人为的限制,那么这可能是一个可行的选择。

关于java - 地址调用类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2873008/

10-10 02:42