2013-10-28 175 views
0

我從同一個超類創建一個不同動物對象的數組,然後使用for循環我使用另一個類的方法檢索每個動物的描述,但是當我分配每個新的動物對陣列它改變每個的名字和類型到那最後的動物。如何讓它停止改變每隻動物的參數?對象數組賦值改變參數

這裏是我現在的代碼:

我對動物的每種類型,每種類型不同的描述中列出的構造。

Animal[] family = new Animal[5]; 

family[0] = new Dog("Wrex", "dog"); 
family[1] = new Wolf("Fenrir", "wolf"); 
family[2] = new Snake("Kaa","snake"); 
family[3] = new Snake("Nagini", "snake"); 
family[4] = new Chameleon("David", "chameleon"); 

for(int i = 0; i < 5; i++) 
{ 
    family[i].describe(); 
} 

這是它打印出:

大衛是一個變色龍。

David barks。

大衛移動了四條腿。

大衛從它的主人那裏得到食物。

大衛吃了咀嚼。

大衛是一個變色龍。

大衛豪爾斯。

大衛移動了四條腿。

大衛通過狩獵包裝獲取食物。

大衛吃了咀嚼。

編輯

我的描述方法是每一個動物類不同,但它們都遵循這樣的格式:

public void describe() 
{ 
    System.out.println(Chameleon.getName()+ " is a " +Chameleon.getType()+ "."); 
    makeSound(); 
    move(); 
    getFood(); 
    eatFood(); 
} 

編輯2

下面是每個類的粗線條和子類

public class Animal {

private static String name; 
private static String type; 

public Animal(String name, String type) 
{ 
    Animal.name = name; 
    Animal.type = type; 
} 

public static String getName() { 
    return name; 
} 

public void setName(String name) { 
    Animal.name = name; 
} 

public static String getType() { 
    return type; 
} 

public void setType(String type) { 
    Animal.type = type; 
} 

公共類哺乳動物延伸動物{

public Mammal(String name, String type) 
{ 
    super(name, type); 
} 

}

爬行動物是相同的哺乳動物

每個最後子類看起來像這樣與上述

張貼的描述方法

公共課變色龍延伸爬行動物{

public Chameleon(String name, String type) 
{ 
    super(name, type); 
} 
+1

我們將不得不看看什麼.describe()包含爲了給你任何答案。而且,只要你對問題的描述是足夠的,那麼很長的輸出列表就是不必要的。 –

+0

我個人發現輸出有助於理解問題,但2或3個項目而不是5個就足夠了。 –

+1

你可以顯示'describe'方法嗎? –

回答

1

static! 刪除靜態關鍵字。這是唯一的問題。瞭解更多關於它here

使用本並相應地改變事物

private String name; 
private String type; 
+0

賦值需要靜態類型變量。同時從實例變量中刪除靜態會給我在哺乳動物和爬行動物下的所有子類中的錯誤。 – user2929674

+0

是的,我知道這就是爲什麼你必須相應地改變你的代碼。事情是,當你創建一個變量靜態時,無論你爲這個類創建了多少個不同的對象,同一個變量將被用於所有的對象。我不認爲你可以用靜態變量實現你想要的。也許再次檢查你的問題陳述? –

+0

好的,我得到了代碼工作,感謝您的幫助和有關靜態變量的信息。 – user2929674

0

變量名稱和類型被聲明爲類「動物」是靜態的。因此它們被「動物」類的所有實例共享。