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

これはそれが出力するものです:

デビッドはカメレオンです。

デビッドは吠えます。

デビッドは 4 本足で移動します。

デビッドはその所有者から食べ物を受け取ります。

ダビデは噛んで食べます。

デビッドはカメレオンです。

デビッドは遠吠えします。

デビッドは 4 本足で移動します。

デビッドは群れで狩りをして食料を手に入れます。

ダビデは噛んで食べます。

編集

私の記述方法は動物クラスごとに異なりますが、すべて次の形式に従います。

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 class Mammal extends Animal {

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

}

爬虫類は哺乳類と同じ

最後のサブクラスのそれぞれは、上記の describe メソッドで次のようになります

public class Chameleon は Reptile を拡張します{

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" で static として宣言されています。したがって、それらは「Animal」クラスのすべてのインスタンスによって共有されます。

于 2013-10-28T21:14:33.593 に答える