0

我想创建一个具有不同属性的类列表,但我遇到了一个问题:当我添加一个新的类时,所有其他类都被修改了。(代码真的很大,所以我只发布一个小示例)

public abstract class A{
public static Point Position;
public static int LifePoints;
public static int range;
public static int atackValue;
public static double movementSpeed;

public double getMovementSpeed() {
return movementSpeed;
}
public static void setMovementSpeed(double movement) {//this n funciona
movementSpeed = movement;
}
(...)to make the topic shorter i only show the movement part but class A contains all getters and setters for all movement,position,range,life points and attack value
}

public class B extends A{

public static Point Position;
public static int LifePoints=10000;
public static int range=50;
public static int atackValue=100;
public static double movementSpeed=2;

public A(Point startPoint){
setMovementSpeed(movementSpeed);
setAtackValue(atackValue);
setRange(range);
setLifePoints(LifePoints);
setPosition(startPoint);
}

public class createB(){

(...)

public void create(){

private List<B> list = new ArrayList<B>();

B b = new B(startpoint);

list.add(b);

}

(...)

for(int x=0;x!=list.length();x++){

move(list.get(x));

system.out.println(list.get(x).getMovementSpeed());

}

println 为所有创建的 b 返回正确的值 (2.0),但是每次我创建一个新 b 时,所有其他 b 都停止移动,并且新 b 的移动速度比前一个更快。我的老师制作的移动功能,已确认可以正常工作。我怀疑这个位置工作不正常,而不是将图片移动 2 个像素,它只移动了 X 次。

4

2 回答 2

7

That's because you have static fields instead of instance variables.

于 2013-05-05T20:17:29.557 回答
1

第一点是static字段是类分配的:所有实例只有一个字段。

但是,您的示例中还有其他基本错误。

  • 如果您创建一个子类,它会从其超类继承所有字段。你不需要重复这些。这就是继承的全部意义。您的初始值应在构造函数中设置。

  • 类的构造函数应在该类中定义,并与该类命名相同。A在类中声明一个构造函数是没有意义的B(我猜你发布这个的调整不是很干净)。您的代码似乎也有一些不平衡括号的问题。

  • 您似乎在方法(或静态初始化块,但让我们不管它)之外有执行语句,这也没有意义。

  • 如图所示,抽象类A完全是多余的。

  • 您的方法create似乎永远不会返回它创建的列表。你想如何使用它?

  • 使用缩进。Java 中的标准是每个嵌套块有 4 个缩进空间。

  • 正确命名变量。变量应始终以小写字母开头。以大写字母开头的名称表示类。

总而言之,我在那里感到很困惑。您应该尝试阅读更多实际项目的代码,以了解该语言。

于 2013-05-05T21:00:33.530 回答