使用类中的方法而不创建对象(非静态)

时间:2018-07-11 14:04:46

标签: java class methods setter

我有3个类, Main Enemy UserCharacter 敌人包含敌人的属性和可能采取的行动。 UserCharacter 包含用户的属性和可能的​​操作。 Main 管理逻辑并从 Enemy UserCharacter 类创建对象。

我正在尝试从 UserCharacter

类中的方法使用 Enemy 类中包含的 setter 方法
public class UserCharacter {

    private String userName = "Adventurer";
    private int userAttack = 5;
    private int userLife = 100;

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserLife() {
        return userLife;
    }
    public void setUserLife(int userLife) {
        this.userLife = userLife;
    }


    public void Attack() {          
        Enemy.setEnemyLife(10);                 
    }    
}

是否可以在不将方法设置为静态的情况下做到这一点? (除了创建一个类的对象(因为它是在Main中完成的,这不是一个选择)之外) 是否建议使用静态设置器方法? (我想我必须为设置器创建一个虚拟静态变量)

谢谢

1 个答案:

答案 0 :(得分:2)

您正在问XY Problem,您在哪里以错误的方式查看问题。问题不是您要在不创建实例的情况下调用设置器,而是要在 正确 实例上调用设置器,即

  1. 不,您不想在没有实例的情况下调用实例方法-恐怕这根本没有道理
  2. 是的,是的,将setter设为静态将无济于事,因为那时每个敌人将共享相同的状态-不好。
  3. 不,您不想创建“虚拟”实例(更改您不使用的东西的状态有什么好处?)
  4. 要做,需要将正确的敌人实例的引用传递到需要调用该方法的位置,然后在该实例上调用该方法。理解正在发生的事情的关键是角色不仅在与任何敌人战斗,而且还在与特定敌人战斗,这是由您的游戏决定的,您需要当攻击/战斗发生时,更改该角色和特定敌人的状态。因此,更改虚拟敌人或所有敌人(通过静态)的状态没有任何意义。它必须是特定敌人对象,这就是为什么您需要在需要时引用该对象并在该对象上调用方法的原因。

在此设置下,我将创建一个Game或World类,以处理敌人与角色之间的交互和冲突。当角色攻击敌人时,它会告诉世界等级它正在这样做,以及哪个敌人和World对象确定要从角色和敌人中增加或减去的点。