2017-01-17 1 views
1

Javaでポリモーフィックなクラスの配列を作成したいと思います。それは動物の配列であり、私は配列に異なる種類の動物を追加したい。動物はスーパークラスであり、異なる種類の動物はサブクラスであり、属性に基づいて特定の動物を配列に追加するメソッドを実装する必要がありますが、すべての種類の動物が異なる属性を持つため、それを行う。 私はこれまでのところ、この基本的な方法を持っており、それがコンパイルされます。Javaのメソッドに条件を交互に入れることはできますか?

public void addAnimal(String name, double weight) { 
     if ((numberanimals < animals.length) && (numberanimals == 0)) { 
      animals[0] = new Animal(name, weight); 
      numberanimals += 1; 
     } else if (numberanimals < animals.length) { 
      animals[numberanimals] = new Animal(name, weight); 
      numberanimals += 1; 
      } else { 
       System.out.println("Zoo is full."); 
      } 
} 

すべての動物は、名前と重みを持っていますが、どのように、私は彼の綱の長さや言うブール値を持つサメに基づいて、インスタンスのための犬を追加します彼が空腹であろうとなかろうと。そのような方法でそれを行うことさえ可能ですか?

+1

通常は、最初の動物を作成し、 'addAnimal(動物のa)は'( '' addAnimal(新キリン( "ショーティ"))など)に渡します。 – molbdnilo

+1

メソッドを 'public void addAnimal(Animal animal)'に変更すると、どんなタイプの動物(Animalから継承するクラス)も受け取ることができます。次にメソッドを呼び出す前に動物を作成します。 –

+0

スーパークラスへの抽象述語メソッドを使用して、それをサブクラス内のさまざまな選択条件でオーバーライドできます。 –

答えて

3
  1. CrocodileAnimalです。
  2. Animalは、Animalメソッドとパブリックフィールドへのアクセスを保証しています。
  3. Animalはそれがワニである場合、あなたはキャストできanimal instanceOf Crocodile
  4. を使用してCrocodileであるかどうかをチェックすることができます:Crocodile croco = (Crocodile)animal;を。
  5. であるので、CrocodileAnimal[]またはList<Animal>に追加できます。
  6. すべてのオブジェクトはinstanceOf Objectです。すべてのクラスがObjectに拡張されています。

あなたの方法は次のようになります。

public void addAnimal(Animal a){ 
    if ((numberanimals < animals.length) && (numberanimals == 0)) { 
     animals[0] = a; 
     numberanimals += 1; 
    } else if (numberanimals < animals.length) { 
     animals[numberanimals] = a; 
     numberanimals += 1; 
     } else { 
      System.out.println("Zoo is full."); 
     } 
    } 
} 

、その後、あなたはどんなAnimalでそれを呼び出すことができます - LionからaddAnimal(new Lion(...));など

2

あなたは '呼び出すことで、インスタンスの正確なクラスを確認することができますinstanceof 'たとえば :

if(animals[i] instanceof Dog) { 
//do something 
} 
+0

それは別の仕事で私を助けましたが、私はどのようにして犬の属性を使うことができますか?たとえば、動物[i] .leashは動作しません。 – NoIdea

+1

動物クラスにはリーシュプロパティがないので、最初に犬にキャス​​トする必要があります。 '((Dog)animals [le]'あなたはそれがDogクラスのインスタンスであることを確認しなければならない!! – nikowis

関連する問題