java - 扩展类和静态变量

标签 java inheritance static extends

我有 DynamicObjectPlayerEnemy

public class DynamicObject {

    protected static float speed;
}



public class Player extends DynamicObject {
       /*some code*/
       Player.speed = 100;
}


public class Enemy extends DynamicObject {
       /*some code*/
       Enemy.speed = 50;
}

speed 值总是被覆盖。当然,我可以在 PlayerEnemy 中创建新的 speed 变量,但是现有的 DynamicObject 类就毫无意义了。我想在每个类(class)上使用不同的 speed 值。当前类的所有对象将具有相同的速度。我应该如何以正确的方式制作它?

最佳答案

speed 变量不应该是static。否则它不会绑定(bind)到 DynamicObject 类的任何实例,也不会绑定(bind)到它的任何子类实例。

如果你想为每个子类设置不同的 speed 值,你可以这样做:

public class DynamicObject {    
    protected float speed;

    public DynamicObject(float speed) {
        this.speed = speed;
    }

    public float getSpeed() {
       return this.speed;
    }
}

public class Player extends DynamicObject {
   /*some code*/
   public Player(float speed) {
       super(speed);
   }

}


public class Enemy extends DynamicObject {
       /*some code*/
   public Enemy(float speed) {
       super(speed);
   }
}

关于java - 扩展类和静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126403/

相关文章:

java - 从 .jar 文件复制文件夹

c++ - 我可以部分实现接口(interface)层次结构吗?

java - scala(包)对象反编译为 java - 包含 "new ();"的静态初始值设定项 - 那是什么?

c++ - 当我通过静态函数访问静态成员时,是否会出现静态初始化顺序失败的情况?

Java 文本文件无法读取

java - Jshell/env 命令不允许在类路径中设置多个 Jar 文件

java - Maven过滤乱码特殊字符

java - 继承不起作用

javascript - javascript继承之间的区别

c++ - 汇编代码中的静态值