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();
}

这是它打印出来的:

大卫是变色龙。

大卫吠叫。

大卫四足行走。

大卫从它的主人那里得到食物。

大卫通过咀嚼进食。

大卫是变色龙。

大卫嚎叫。

大卫四足行走。

大卫通过成群狩猎获得食物。

大卫通过咀嚼进食。

编辑

我的描述方法对于每个动物类都是不同的,但它们都遵循这种格式:

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

编辑 2

这是每个类和子类的粗略概述

公共类动物{

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);
}

}

爬行动物和哺乳动物一样

最后一个子类中的每一个看起来都像上面发布的 describe 方法

公共类变色龙扩展爬行动物{

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

2 回答 2

1

static!!!删除 static 关键字。这是唯一的问题。在此处阅读有关它的更多信息

使用它并相应地改变事情

private String name; 
private String type;
于 2013-10-28T21:12:54.757 回答
0

变量名称和类型在“Animal”类中声明为静态。因此,它们由“Animal”类的所有实例共享。

于 2013-10-28T21:14:33.593 回答