Java创建一个包含多个对象的类的列表

问题描述:

我想创建一个具有不同属性的类的列表,但是我面临一个问题:当我添加一个新类时,所有其他类都被修改(代码非常大所以我张贴只是一个小样本)Java创建一个包含多个对象的类的列表

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。

+3

你的代码有一个急性“静态itis”的情况。请摆脱大部分静态调节器,以免患者死亡。 – 2013-05-05 20:17:26

+1

从字段中移除静态 – user1121883 2013-05-05 20:18:01

+0

另外,考虑清理您的代码示例。这些领域中的大多数与您的问题无关(或者更确切地说,是同一基本问题的重复表现形式),而且这些领域并没有缩进。 – millimoose 2013-05-05 20:19:36

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

+0

它的工作原理!谢谢。 – Miigueel 2013-05-05 20:42:11

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

虽然您的示例中还存在其他基本错误。

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

  • 一个类的构造函数应该在该类中定义并且与该类的名称相同。在类B中声明构造函数A没有任何意义(我想你对这个贴子的调整不够干净)。你的代码似乎也有一些不平衡括号的问题。

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

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

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

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

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

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