Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当只需要该类的一个实例时,是否应该每次创建指向该类的新链接?_Java_Oop - Fatal编程技术网

Java 当只需要该类的一个实例时,是否应该每次创建指向该类的新链接?

Java 当只需要该类的一个实例时,是否应该每次创建指向该类的新链接?,java,oop,Java,Oop,例如,有一个职业战士链接了职业剑。类内定义字段:公共静态int hp=100;显示了这种武器消耗的生命值。需要几个职业。我想我需要在类战士中定义链接剑(只有一次)才能获得静态场hp。我怎样才能正确链接它 class public Warrior{ public String name; public Sword s = new Sword(); // ??? } class public Sword{ public static int hp = 100; } 每次创

例如,有一个职业战士链接了职业剑。类内定义字段:公共静态int hp=100;显示了这种武器消耗的生命值。需要几个职业。我想我需要在类战士中定义链接剑(只有一次)才能获得静态场hp。我怎样才能正确链接它

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

}
每次创建新战士时,
newswill()
是否会创建指向类的链接? 我可以在另一个武器类中将剑类定义为静态的吗?(需要多个类,比如剑)


下面的结构正确吗?外部类是否可以是静态的,并保存在另一个静态类中

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;

    }

我不确定您到底想要什么,但正如您现在的代码示例所示,战士的构造会导致剑的构造

这取决于你所说的“消耗的健康点”是什么意思。如果你想记录这类武器造成的所有伤害,你最好使用你的静态生命场。如果这是您想要的,我建议您使用一个跟踪各种统计数据的系统。大概是这样的:

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

如果你想记录每把剑的生命值(这对我来说是最现实的,因为剑不会永远锋利),你应该创建非静态场。这使该字段成为每个剑实例的属性。

是的,每次你都会得到一把新剑

但是,由于hp是一个静态字段,因此您只能获得其中一个字段

有关更多信息,请查看此链接:

如果
hp
静态的
,则您根本不需要成员
。您可以使用
swarm.hp

访问该字段,以获得不需要创建的静态字段hp

public Sword s = new Sword();
在武士班。静态变量在加载时初始化。因此,只需使用

剑.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点生命值的新剑,每个战士将消耗自己的生命值。希望它能有所帮助。

如果武器类型的数量不变,那么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;
}

也许你应该考虑一个
武器
超类,比如
公共类剑扩展武器
。我可以将剑类(武器类的子类和嵌套类)定义为静态类(以便只获得一个实例)吗?需要一种类型的剑。所以我想让它在父类中保持静态。但是。。。。我想你还没有完全理解OOP是什么。Java中的类类似于“人”(它是一种类型、排序、种族),而类的对象就是您。你(对象)是人类(类)。因此,在这种情况下,说需要一种剑是胡说八道。创建一个类剑,定义一把剑。一旦你创建了剑类的物体,你就可以“触摸”它。然后你可以把它交给一个能用它战斗的战士。我有一个战士有一种武器。每件武器都有生命值(命中=伤害后的生命值)。我不需要追踪武器的血量(它的损坏程度)。所以我认为我只需要一个静态(或抽象???)类武器,它是每个子类(剑、弓等)的父类。