【问题标题】:Accessing objects of other classes访问其他类的对象
【发布时间】:2012-12-14 19:45:35
【问题描述】:

我最近学习了 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 的编程风格。

【问题讨论】:

  • 导入它们并使用对象的一个​​实例,比如将一个作为参数传递?

标签: java class object


【解决方案1】:

类只是对象的蓝图。

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

Player player = new Player();

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

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

【讨论】:

    【解决方案2】:

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

    battle.java

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

    player.java:

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

    monster.java:

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

    【讨论】:

      【解决方案3】:

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

      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();
          }
      }
      

      希望有帮助/有意义!

      【讨论】:

      • 谢谢!正是我试图理解的。谢谢。
      猜你喜欢
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多