我有一个抽象类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/