我需要一个与对象无关但与类本身相关的静态变量。但是,该变量也不得与父类或扩展同一父类的所有其他子类相关。
假设:
class Army{
static int attack = 0;
}
class Warrior extends Army{
public Warrior(){
attack = 50; // every Warrior object will have attack value of 50
}
}
class Archer extends Army{
public Archer(){
attack = 75; // every Archer object will have attack value of 75
}
}
这可能吗?或者我需要在每个子类中声明静态变量吗?我试过了,当我尝试访问静态变量时,每个类的静态变量值最终都相同。
最佳答案
您当前的代码不会执行您想要的操作,因为 Army
类中只有一个 attack
变量,并且它只能有一个值。
您可以在 Army 中使用一个返回默认值的方法:
public int getAttack()
{
return 10;
}
然后你可以在你的子类中覆盖这个方法:
class Warrior extends Army
{
...
@Override
public int getAttack()
{
return 50;
}
...
}
class Archer extends Army
{
...
@Override
public int getAttack()
{
return 75;
}
...
}
尽管 getAttack()
不是变量,也不是静态的,但它仍然可以满足您的要求 - 每个子类都可以具有由该子类的所有实例共享的不同值。
关于java - 子类Java中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27355033/