对象数组赋值更改参数

时间:2013-10-28 20:52:26

标签: arrays object for-loop constructor polymorphism

我正在创建一个来自同一个超类的不同动物对象的数组,然后使用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;
}

公共课Mammal扩展了Animal {

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

}

爬行动物与哺乳动物相同

最后一个子类的每一个都使用上面描述的describe方法

公共课变色龙延伸爬行动物{

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

2 个答案:

答案 0 :(得分:1)

static !!! 删除static关键字。这是唯一的问题。详细了解here

使用它并相应地更改内容

private String name; 
private String type;

答案 1 :(得分:0)

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