Java方法会影响对象的所有其他实例

时间:2018-05-09 20:32:33

标签: java object inheritance static instance-variables

所以我正在为一个项目创建一个面向对象的视频游戏Fortnite表示。让我们说一个玩家喝一个盾牌然后该玩家的个人盾牌应该上升25个。但是我有一个问题,如果一个玩家实例喝了一个盾牌,地图上的每个其他玩家实例也会得到一个增强盾牌。这对于受到伤害和其他治疗都有两种方式。

问题:

    System.out.println(broseidon.getCharacter());
    System.out.println(ninja.getCharacter());
    broseidon.getCharacter().heal(miniShield);
    System.out.println(broseidon.getCharacter());
    System.out.println(ninja.getCharacter());

输出:

Health: 100, Shield: 0
Health: 100, Shield: 0
Drank minishield
Health: 100, Shield: 25
Health: 100, Shield: 25

我检查了静态变量。不确定是什么错。以下是我使用的方法。每个Account实例只有一个PlayerCharacter实例。

public class Account{
...
    protected PlayerCharacter getCharacter() {
            return pc;
        }
}

public class PlayerCharacter{
...
//HEAL method
    public void heal(HealingItem hi) {
        switch(hi.getType().toLowerCase()) {
        case "bandages":
            if(this.getHealth() < 75) {
                this.setHealth(75);
                System.out.println("Used bandages to heal");
            }else {
                System.out.println("Alert: Bandages cannot be used past 75 health.");
            }
            break;
        case "medkit":
            this.setHealth(100);
            System.out.println("Used medkit to heal");
            break;
        case "minishield":
            if(this.getShield() < 50) {
                this.setShield(this.getShield() + 25);
                System.out.println("Drank minishield");
            }else {
                System.out.println("Alert: miniShield cannot be used past 50 shield.");
            }
            break;
        case "bigshield":
            if((this.getShield() - 50) < 50) {
                this.setShield(100);
                System.out.println("Drank big shield");
            }else {
                this.setShield(this.getShield() + 50);
                System.out.println("Drank big shield");
            }
            break;
        case "chugjug":
            this.setHealth(100);
            this.setShield(100);
            System.out.println("Drank Chug Jug");
            break;
        }
    }
}

如果您想了解更多有关的方法/变量,请告诉我们。我以为这个&#39;这个&#39;只适用于所调用的特定实例。现在我很困惑。

编辑: 这是Accounts的实例化(每个使用Singleton设计模式分配一个且只有一个PlayerObject)。 .heal()的使用如上所示:    broseidon.getCharacter()愈合(miniShield);

Account broseidon = new Account("Broseidon", true);
        Account ninja = new Account("Ninja", true);

0 个答案:

没有答案