【问题标题】:calling sub methods on various objects in an array list在数组列表中的各种对象上调用子方法
【发布时间】:2017-10-11 21:26:44
【问题描述】:

我有一个陆地动物的 ArrayList。所有动物都属于不同的类,它们扩展了一个名为Animal 的抽象超类。它们都有eatwalksleep等方法,但只有Bird类有fly方法。

如何对 ArrayList 中的所有 Bird 对象调用 fly 方法?

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?
    }
}

【问题讨论】:

    标签: java oop arraylist


    【解决方案1】:

    首先,您需要遍历landAnimals 的内容。您可以使用standard for loop

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

    然后您需要确定每个特定的动物对象是否属于Bird 类。您可以使用 instanceof 运算符来做到这一点。

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

    那么你需要将castanimal 转换为Bird 类型,然后才能调用它的fly 方法。完成后,您可以进行标准方法调用。

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

    【讨论】:

      猜你喜欢
      • 2013-10-07
      • 2018-10-21
      • 2012-04-21
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多