2017-05-12 2 views
1

Ich habe eine ArrayList von Tieren an Land. Alle Tiere sind von verschiedenen Klassen, die eine abstrakte Oberklasse namens Animal erweitern. Sie alle haben Methoden wie eat, walk, sleep usw., aber nur die Bird Klasse hat die Methode fly.Aufruf Sub-Methoden auf verschiedenen Objekten in einer Array-Liste

Wie kann ich die fly Methode auf allen Bird Objekten in der ArrayList aufrufen?

public class Land{ 
    ArrayList<Animal> landAnimals = new ArrayList<Animal>(); 

    Land(Bird bird, Bird bird2, Bird bird3, Cat cat, Mouse mouse, Dog dog, Dog dog2){ 
     landAnimals.add(bird); 
     landAnimals.add(cat); 
     landAnimals.add(mouse); 
     landAnimals.add(bird2); 
     landAnimals.add(dog); 
     landAnimals.add(bird3); 
     landAnimals.add(dog2); 
    } 

    public void animalsWalk(){ 
     int size=landAnimals.size(); 
     for (int count=0; count<size; count++){ 
      landAnimals.walk(); 
     } 
    } 

    public void birdsFly(){ 
     //How do I make birds in the arraylist fly? 
    } 
} 

Antwort

1

Zuerst müssen Sie über den Inhalt landAnimals iterieren. Sie können das tun mit einem standard for loop:

for(int i = 0; i < landAnimals.size(); i++) { 
    Animal animal = landAnimals.get(i); 
    // TODO 
} 

Dann brauchen Sie, um zu bestimmen, ob jedes einzelne Tier Gegenstand der Bird Klasse. Sie können das mit dem Operator instanceof tun.

for(int i = 0; i < landAnimals.size(); i++) { 
    Animal animal = landAnimals.get(i); 
    if(animal instanceof Bird) { 
     // TODO 
    } 
} 

Dann müssen Sie castanimal zum Bird Typ, bevor Sie seine fly Methode aufrufen können. Sobald Sie dies getan haben, können Sie den Standardmethodenaufruf durchführen.

for(int i = 0; i < landAnimals.size(); i++) { 
    Animal animal = landAnimals.get(i); 
    if(animal instanceof Bird) { 
     ((Bird) animal).fly(); 
    } 
} 
Verwandte Themen