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

開始するのに適した場所は、モンスターが攻撃する「ときに」攻撃したいプレーヤーを渡すことです。

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();
    }
}
于 2012-12-30T04:14:31.490 に答える
1

クラスは、オブジェクトの単なる青写真です。

インスタンス化した実際のPlayerオブジェクトのPlayerクラスで定義されたメソッドのみを呼び出すことができます。これは、main(String[] args)メソッドの次の行で行います。

Player player = new Player();

ただし、player変数は、その宣言のスコープ内のコードでのみ使用できるようになりました。この場合、main(String[] args)メソッドのこの行の後のどこかにあります。

この範囲外では利用できません。attackPlayer()Monsterクラスのメソッドは、間違いなくこの範囲外です。そこで参照playerする場合、コンパイラーはそのトークンが何を参照しているかについての手がかりを持っていません。playerメソッドの呼び出しを開始する前に、そのメソッドに名前付きのPlayerタイプの引数(または実際には好きなもの)を渡す必要があります。

于 2012-12-30T04:37:20.830 に答える