我DynamicObject
,Player
,Enemy
类
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
值。当然,我可以在speed
和Player
中创建新的Enemy
变量,但是现有的DynamicObject
类是没有意义的。我希望每个类都有不同的speed
值。当前类的所有对象都具有相同的speed
。我该如何正确地做到这一点?
答案 0 :(得分:4)
speed
变量不应为static
。否则,它不会绑定到DynamicObject
类的任何实例,也不会绑定到任何子类实例。
如果您希望每个子类具有不同的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);
}
}
答案 1 :(得分:4)
如果每个DynamicObject都有一个速度,并且每个实例(例如Player)的速度相同,那么你应该有
public abstract int getSpeed();
在DynamicObject中,
@Override
public int getSpeed() {
return 100;
}
播放器中的。
如果您需要在不实例化播放器的情况下访问为evry实例播放的常量速度,请使用
public static final int CONSTANT_PLAYER_SPEED = 100;
@Override
public int getSpeed() {
return 100;
}
并使用Player.CONSTANT_PLAYER_SPEED
来获取所有玩家的速度。
答案 2 :(得分:2)
从该变量中删除静态,如果变量是静态的,则它属于该类,而不属于实例。
保护静态变量不会产生任何场景,因为继承和静态是完全不同的。
protected float speed;
答案 3 :(得分:1)
您还可以使用抽象方法,这意味着您必须始终在子类中覆盖它。
public abstract class Dynamic {
protected float speed;
abstract void setSpeed();
}
public class Player extends Dynamic{
@Override
void setSpeed() {
this.speed=50;
}
}