2

例如,有一个职业战士与剑职业联系在一起。在剑类中定义字段:public static int hp = 100; 它显示了这种武器消耗的生命值。需要几个职业的战士。我想我需要在 Warrior 类中定义链接 Sword(仅一次)才能获得静态字段 hp。我怎样才能正确链接它?

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

}

new Sword()每次创建新战士时都会创建指向班级的链接吗?我可以在另一个 Weapon 类中将 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 是一个静态字段,所以您只会得到其中一个。

查看此链接以获取更多信息: http ://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

于 2012-04-13T15:06:26.413 回答
1

如果hpstatic,则您根本不需要成员Sword。您可以使用 访问该字段Sword.hp

于 2012-04-13T15:07:39.610 回答
1

要获得静态字段 hp,您无需创建

public Sword s = new Sword();

在武士班。静态变量在加载时初始化。因此,您可以在任何地方访问您的 hp,而无需在特定类中声明,只需使用

剑.hp ;

这对静态变量没有任何影响。

 Sword s = new Sword()

据我了解,您目前拥有剑士和不同的武器。每种武器都有生命值,每个战士都有自己的武器和生命值。如果您使用静态字段,那么这些健康点将在所有战士之间共享,如果有 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 回答
1

如果武器类型的数量是恒定的,那么枚举会很好地工作。

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 回答