2016-11-28 6 views
1

私は継承の代入を行っていますが、これまでにスーパークラスをサブクラスとして作成しています。これらのクラスには、動物の名前や年齢などの情報を定義するためのメソッドが追加されています。今度は、次のことを行うように求められました。継承を含むArrayListsにプロパティを追加する方法は?

  • AnimalオブジェクトのArrayListを作成するmainメソッドでデモクラスを作成します。異なる動物や異なる名前と年齢のリストを記入してください。

私はこれで完全に混乱しています。私が新しいArrayList内で動物を作成しようとすると、Animalクラスが抽象クラスであり、インスタンス化できないことがわかります。ここでは、関連するクラスの内容は次のとおりです。

Animalクラス(スーパークラス)

abstract public class Animal 
{ 

    int age; 
    String name; 
    String noise; 

Animal(String name, int age) 
{ 
    this.age = age; 
    this.name = name; 
} 

Animal() 
{ 

    this("newborn", 0); 
} 

abstract public void makeNoise(); 

public String getName() { 
     return name; 
    } 
    public int getAge() 
    { 
     return age; 
    } 

    public void setName(String newName) { 
     name = newName; 
    } 

abstract public Food eat(Food x) throws Exception; 

abstract public void eat(Food food, int count) throws Exception; 


} 

ウルフクラス(サブクラス)

import java.util.ArrayList; 

public class Wolf extends Carnivore 
{ 

      ArrayList<Food> foodGroup = new ArrayList<>(); 
String name; 
int age; 

Wolf(String name, int age) 
{ 
    this.name = name; 
    this.age = age; 
} 
Wolf() 
{ 
    super(); 
} 
    public void makeNoise() 
    { 
     noise = "Woof!"; 
    } 
    public String getNoise() 
    { 
     return noise; 
    } 

    public Food eat(Food x) throws Exception 
    { 
     if (x instanceof Meat) { 
       return x; 
      } else { 
       throw new Exception("Carnivores only eat meat!"); 
      } 
    } 
public void eat(Food food, int count) { 
    while (count > 0) { 
     addFood(food); 
     count--; 
    } 
} 


public void addFood(Food inFood) 
{ 
    foodGroup.add(inFood); 
} 
} 

デモクラスは

import java.util.ArrayList; 

public class Demo { 

    public static void main(String[] args) 
    { 
        ArrayList<Animal> animalGroup = new ArrayList<>(); 
    //Add new Animals with properties such as name and age?   
    Animal wolf1 = new Wolf(); 

    addAnimal(new Wolf("lnb1g16", 6)); 

    } 

    public static void addAnimal(Animal inAnimal) 
{ 
    animalGroup.add(inAnimal); 
} 

} 

どうやら私は、これらの以前のクラスに基づいてデモクラスで動物の配列を作成すると仮定していますか?私はこれがどのように行われるのか、なぜ別の主要な方法を作る必要があるのか​​理解していません。デモクラスをどのように書くかについての助言は、私が何を求められているのか混乱しているので、とても感謝しています。

+0

肉食動物は動物を拡張していますか?狼を作成してArrayListに追加しようとするとうまくいくのですか?エラーではない場合は何ですか? –

+0

CarnivoreはAnimalを拡張します。新しいwolfオブジェクトを作成し、このwolf1(new Animal( "Wolf"、6))のようにArrayListに追加しようとすると、 "Animal is abstract、インスタンス化できません"というエラーが表示されます。 – Ben

+0

あなたはWolfクラスを持っていますので、 'new Wolf(....' –

答えて

0

デモクラス

public static void main(String[] args) 
{ 
       ArrayList<Animal> animalGroup = new ArrayList<>(); 
//Add new Animals with properties such as name and age?   
Animal wolf1 = new Wolf(); 

animalGroup.add(new Wolf("sam", 5)); 
animalGroup.add(new Wolf("george", 5)); 
animalGroup.add(new Wolf("patrick", 7)); 

} 
+0

)を実行してはいけません。個々の動物の全てを実際にインスタンス化するための主要なメソッドを作る必要がありました。実際には、その青写真に基づいて動物を作るまで、実際に機能します。メインメソッドはすべての動物を構築します。また、メインメソッドが1つ必要です。デモクラスでは、他のメソッドはまったく必要ありません。 – Sam

+0

ありがとうこれは理解しやすくなりました。 – Ben

関連する問題