web-dev-qa-db-ja.com

他のクラスのオブジェクトへのアクセス

最近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のプログラミングスタイルを理解しようとしています。

6
Lucas Penney

あなたはおそらくこのようなものが欲しいだけです:

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

それが役立つ/意味があることを願っています!

11
awolfe91

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

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

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

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

_Player player = new Player();
_

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

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

0
davnicwil