同じスーパークラスからさまざまな動物オブジェクトの配列を作成し、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);
}