2013-10-28 180 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

变量名称和类型被声明为类“动物”是静态的。因此它们被“动物”类的所有实例共享。