2

たとえば、ソード クラスにリンクされたウォリアー クラスがあります。クラス Sword 定義フィールド: public static int hp = 100; このタイプの武器によって消費されるヘルス ポイントを示します。いくつかのクラスの戦士が必要です。静的フィールド HP を取得できるようにするには、Warrior クラスでリンク Sword (1 回のみ) を定義する必要があると思います。どうすればうまくリンクできますか?

class public Warrior{
    public String name;
    public Sword s = new Sword(); // ???
}
class public Sword{
    public static int hp = 100;

}

new Sword()新しい戦士が作成されるたびにクラスへのリンクを作成しますか? Sword クラスを別の Weapon クラス内で static として定義できますか? (Swordのように複数のクラスが必要です)


次の構造は正しいですか?外部クラスは静的で、別の静的内に保持できますか?

class public Warrior{
        public String name;

        public int SwordHp = Weapon.Sword().hp;
        public int BowHp = Weapon.Sword().hp;

    }

(abstract?) public static class Weapon{
    public static class Sword{
        public static int hp = 100;

    }
    public static class  Bow{
        public static int hp = 90;

    }
4

5 に答える 5

2

あなたが正確に何を望んでいるのかはわかりませんが、コード例のように、戦士の構築により剣が構築されます。

「消費されるヘルスポイント」の意味によって異なります。このタイプの武器が引き起こしたすべてのダメージを追跡したい場合は、静的 HP フィールドが適しています。これが必要な場合は、あらゆる種類の統計を追跡するシステムを使用することをお勧めします. このようなもの:

Statistics.getStatisticsForPlayer(playerName). // Get the statistics for a player
  increaseValue("damage_caused_by_sword", extraDamage); // increase that property

剣ごとのヘルス ポイントを追跡したい場合 (剣は永遠に鋭くないため、これが最も現実的に見えます)、非静的フィールドを作成する必要があります。これにより、フィールドはすべての Sword インスタンスのプロパティになります。

于 2012-04-13T15:05:43.513 に答える
2

はい、毎回新しい剣を手に入れます。

ただし、hp は静的フィールドであるため、そのうちの 1 つしか取得できません。

詳細については、次のリンクを参照してください: http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

于 2012-04-13T15:06:26.413 に答える
1

武器の種類の数が一定の場合、enum はうまく機能します。

enum Weapon {
   Sword(100),
   Bow(90);

   private final int hp;
   private Weapon(int hp) {
      this.hp = hp;
   }

   int getHp();
}

public class Warrior {
   public String name;
   public Weapon weapon = Weapon.Sword;
}
于 2012-04-13T18:02:20.617 に答える
1

の場合、メンバーhpstaticまったく必要ありませんSword。でそのフィールドにアクセスできますSword.hp

于 2012-04-13T15:07:39.610 に答える
1

静的フィールド hp を取得するために、作成する必要はありません

public Sword s = new Sword();

戦士クラスで。静的変数はロード時に初期化されます。したがって、使用するだけで、特定のクラスで宣言することなく、どこからでも hp にアクセスできます。

剣.hp;

これは静的変数には影響しません。

 Sword s = new Sword()

私が理解しているように、あなたは戦士と現在の剣のようなさまざまな武器を持っています.すべての武器にはHPのヘルスポイントがあり、すべてのウォリアーには独自の武器とヘルスポイントがあります. 静的フィールドを使用する場合、これらのヘルス ポイントはすべてのウォリアー間で共有されます。50 人のウォリアーの場合、すべてのウォリアーが 100 ポイントだけを使用します。

class public Warrior{
    public String name;
    public Sword s = new Sword(); // ???
}
class public Sword{
    public  int hp = 100;

}

戦士が作成されるたびに 100 ヘルス ポイントの新しい剣が作成され、すべての戦士は自分のヘルス ポイントを消費します。それが役立つことを願っています。

于 2012-04-13T15:09:52.360 に答える