java - 子类Java中的静态变量

标签 java oop object

我需要一个与对象无关但与类本身相关的静态变量。但是,该变量也不得与父类或扩展同一父类的所有其他子类相关。

假设:

    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/

相关文章:

java - 如何为 LinkedTransferQueue 提供容量?

java - 在java中从接口(interface)扩展的好处是什么

c# - 基于OOP概念的C和C#有什么区别?

java - CXF 在 WEBSPHERE 上运行

java - Spark java : how to handle multipart/form-data input?

java - Android抛出空指针异常

algorithm - 搜索算法 : Parsing and processing a request OOP style

javascript - 如何从对象 : Javascript 中获取保存对象实例的变量名

javascript - 使用扩展运算符来简化代码

javascript - 如何为一个 JavaScript 对象分配多个值?