例如,有一个类Warrior有链接类Sword。在类Sword定义的字段中:public static int hp = 100;它显示了这种武器消耗的健康点。需要一些Warrior课程。我想我需要在类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类定义为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;
}
答案 0 :(得分:2)
我不确定你到底想要什么,但正如你现在的代码示例一样,Warrior的构造会导致剑的构造。
这取决于“消耗的健康点”的含义。如果你想跟踪这种类型武器造成的所有伤害,你就可以使用静态HP场。如果这是你想要的,我建议使用一个跟踪所有统计数据的系统。像这样:
Statistics.getStatisticsForPlayer(playerName). // Get the statistics for a player
increaseValue("damage_caused_by_sword", extraDamage); // increase that property
如果你想跟踪每把剑的健康点(这看起来对我来说最真实,因为剑永远不是锋利的),你应该创建非静态场。这使得该字段成为每个Sword实例的属性。
答案 1 :(得分:2)
是的,每次你都会得到一把新剑。
但是,因为hp是静态字段,所以只能获得其中一个。
请查看此链接以获取更多信息: http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
答案 2 :(得分:1)
如果hp
为static
,则根本不需要成员Sword
。您可以使用Sword.hp
访问该字段。
答案 3 :(得分:1)
要获取静态字段hp,您无需创建
public Sword s = new Sword();
在战士班。静态变量在加载时初始化。因此,只需使用
即可在任何地方访问hp,而无需在特定类中声明Sword.hp;
这对静态变量没有任何影响。
Sword s = new Sword()
据我了解你有一个战士和不同的武器,如目前的Sword.Every武器有健康点hp和每个Warior有自己的武器和健康点。如果你使用静态字段,那么这些健康点将在所有战士之间共享,如果有50个老人,那么所有人只会使用100点来收集我希望你不想要的,所以你应该使用:
class public Warrior{
public String name;
public Sword s = new Sword(); // ???
}
class public Sword{
public int hp = 100;
}
每次创造一个战士并且每个战士将消耗他自己的健康点时,它将创造一个具有100个生命值的新剑。希望它会有所帮助。
答案 4 :(得分: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;
}