2013-05-05 146 views
0

我想創建一個具有不同屬性的類的列表,但是我面臨一個問題:當我添加一個新類時,所有其他類都被修改(代碼非常大所以我張貼只是一個小樣本)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

回答

7

這是因爲你有靜態字段而不是實例變量。

+0

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

1

第一點是static字段是類分配的:所有實例只有一個字段。

雖然您的示例中還存在其他基本錯誤。

  • 如果您創建子類,它將繼承其超類的所有字段。你不需要重複這些。這是整個繼承點。你的初始值應該在構造函數中設置。

  • 一個類的構造函數應該在該類中定義並且與該類的名稱相同。在類B中聲明構造函數A沒有任何意義(我想你對這個貼子的調整不夠乾淨)。你的代碼似乎也有一些不平衡括號的問題。

  • 你似乎有一個方法之外的執行語句(或靜態初始化塊,但讓我們離開這一點),這也沒有意義。

  • 如圖所示,抽象類A是完全多餘的。

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

  • 使用縮進。 Java中的標準是每個嵌套塊4個縮進空格。

  • 正確命名您的變量。變量應始終以小寫字母開頭。以大寫字母開頭的名稱表示類。

總而言之,我感到很多困惑。你應該嘗試閱讀更多真實項目的代碼,以獲得對語言的感覺。

相關問題