Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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 - Fatal编程技术网

Java 如何调用使用子类';什么是覆盖的最终变量?

Java 如何调用使用子类';什么是覆盖的最终变量?,java,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; }

我第一节课的相关代码:

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,同时保持两个变量为最终值?

将定义更改为 受保护的浮子最大健康度=100.0f


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

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

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

这对字段不起作用。为此使用并重写(受保护的)方法。@f1sh我在第二个类中考虑过重写方法,但这意味着复制粘贴整个方法,而且肯定有更好的方法way@Aominè你是对的,我想的是受保护的。很晚了:(这里有一个
final
关键字,你知道它是什么意思吗?@karakfa这是我问题的一部分,如果我处理的是正态变量,我就不会有问题了。