java - 在数组列表中的各种对象上调用子方法

标签 java oop arraylist

我有一个陆地上动物的 ArrayList。所有动物都属于不同的类,它们扩展了一个名为 Animal 的抽象父类(super class)。它们都有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?
    }
}

最佳答案

首先,您需要迭代 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
    }
}

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

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

关于java - 在数组列表中的各种对象上调用子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939764/

相关文章:

php - 如何使用不限于类范围的全局类?

java - 在 Java 中编辑字符串 boolean 值和整数的 ArrayList

java - 每次在多对多关系中插入新数据时,以前的数据都会被删除

java - 如何使用 Eclipselink/MongoDB @NoSQL 映射 Map<String, EMBEDDABLE>

java - 如何在其他类中实现接口(interface)和扩展

java - Java中如何通过线程向ArrayList添加项目

java - 遍历 Arraylist<String[]>

java - 如何设置颜色选择器?

c# - 处理将相似实体分组在一起的设计模式

php - 无法输出多维数组