如何调用将使用子类的覆盖最终变量的父函数?

时间:2017-11-15 22:19:38

标签: java

我的第一堂课的相关代码:

protected static final float MAX_HEALTH = 100.0f;
protected static final float MIN_HEALTH = 0.0f;

public void modifyHealth(float enteredAmount)
{
    if (health + enteredAmount > MAX_HEALTH )
    {
        health = MAX_HEALTH;
    }
    else if (health + enteredAmount < MIN_HEALTH)
    {
        health = MIN_HEALTH;
    }
    else
    {
        health += enteredAmount;
    }
}

扩展第一堂课的第二课:

private final float MAX_HEALTH = 500.0f;

当我在第二个类上调用modifyHealth方法时,我希望运行状况能够增加到100以上,但是目前它仍然使用父类的最终变量值。我怎样才能使健康可以增加到500,同时保持变量最终?

2 个答案:

答案 0 :(得分:0)

将定义更改为     protected float MAX_HEALTH = 100.0f;

并在子类中重写。这样你仍然可以使用具有不同MAX_HEALTH值的方法。

答案 1 :(得分:0)

正如其他人的评论所述,考虑改变设计(如果你控制它)。否则,您可以使用Reflection访问该字段并更改其值,如:

Field field = myParentclass.getDeclaredField("MAX_HEALTH");
field.setAccessible(true);
field.setFloat(yourInstance, 500.0f);