9

我最近学习了 Java,但遇到了一个问题。我有几个具有不同类的文件,但我不知道如何访问文件中其他类的对象,而不是声明它们的文件。例如:

player.java:
public class Player 
{
    public static void main(String[] args) {
        Player player = new Player();
    }
    public int getLocation()
    {
         return 2;
    }
}

monster.java:
public class Monster
{
    public void attackPlayer()
    {
        player.getLocation();
    }
}

我不确定如何从其他文件和类本身有效地访问其他类的这些对象?我知道我可以将对象设为静态,然后通过它们所在的类将它们作为变量访问,但这似乎违反直觉?我来自较少面向对象的编程背景,所以我仍在尝试理解 java 的编程风格。

4

3 回答 3

13

你可能只是想要这样的东西:

player.java:
public class Player 
{
    public static void main(String[] args) {
        Player player = new Player();
        Monster monster = new Monster();
        monster.attackPlayer(player);
    }
    public int getLocation()
    {
         return 2;
    }
}

monster.java:
public class Monster
{
    public void attackPlayer(Player player)
    {
        player.getLocation();
    }
}

希望有帮助/有意义!

于 2012-12-30T04:11:01.637 回答
3

一个好的开始是在怪物攻击“何时”传递你想要攻击的玩家。

战斗.java

public class Battle {

  public static void main(String[] args) {
    Player player = new Player();
    Monster monster = new Monster();
    monster.attackPlayer(player);
  }
}

播放器.java:

public class Player 
{
    public int getLocation()
    {
         return 2;
    }
}

怪物.java:

public class Monster
{
    public void attackPlayer(Player player)
    {
        player.getLocation();
    }
}
于 2012-12-30T04:14:31.490 回答
1

类只是对象的蓝图。

您只能在已实例化的实际 Player 对象上调用 Player 类中定义的方法 - 您已在main(String[] args)方法的以下行中完成了此操作:

Player player = new Player();

但是,该player变量现在仅可用于其声明范围内的代码 - 在这种情况下,在main(String[] args)方法中此行之后的任何位置。

它在此范围之外不可用。Monster 类中的attackPlayer()方法绝对不在此范围内!当您在那里引用player时,编译器不知道该标记指的是什么。在开始调用该方法之前,您必须将 Player 类型的参数(命名为player(或任何您喜欢的)传递给该方法。

于 2012-12-30T04:37:20.830 回答