Java列出了包含多个对象的类

时间:2013-05-05 20:15:41

标签: java list class object

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

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次。

2 个答案:

答案 0 :(得分:7)

那是因为你有静态字段而不是实例变量。

答案 1 :(得分:1)

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

但是,您的样本中还存在其他基本错误。

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

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

  • 你似乎有一个方法之外的执行语句(或静态初始化块,但让我们单独留下),这也没有意义。

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

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

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

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

总而言之,我感到很困惑。你应该尝试阅读更多真实项目的代码,以获得对语言的感觉。