java - 从父类(super class)的数组调用子类的方法

标签 java arrays class casting hierarchy

请考虑以下事项。 您有一个 Dog 类和一个 Cat 类,它们都扩展了 Animal 类。 如果您创建一个动物数组,例如。

Animal[] animals = new Animal[5];

在此数组中,每个元素都设置了 5 个随机猫和狗。 如果 Dog 类包含方法 bark() 而 Cat 类不包含,那么如何根据数组调用该方法?例如。

animals[3].bark();

我尝试转换该元素,我正在检查狗,但无济于事,例如。

(Dog(animals[3])).bark();

最佳答案

选项 1:使用 instanceof(不推荐):

if (animals[3] instanceof Dog) {
    ((Dog)animals[3]).bark();
}

选项 2:使用抽象方法增强 Animal:

public abstract class Animal {
    // other stuff here
    public abstract void makeSound();
}
public class Dog extends Animal {
    // other stuff here
    @Override
    public void makeSound() {
        bark();
    }
    private void bark() {
        // bark here
    }
}
public class Cat extends Animal {
    // other stuff here
    @Override
    public void makeSound() {
        meow();
    }
    private void meow() {
        // meow here
    }
}

关于java - 从父类(super class)的数组调用子类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840209/

相关文章:

java - 如何按照我想要的方式准确定位按钮?

Java RMI 工厂 - ClassCastException

java - 比较两个数组列表

arrays - 对分布在多个文件中的 "slices"多个向量进行排序

C#类/对象可视化软件

c++ - 在嵌套类中调用 `operator[]` 后保留类类型

java - 如何将以下数据转换为LOOP

java - 如何在Java中实现YQL?

java - 将单词对象添加到 ArrayList 中

php - 在抽象类方法中返回抽象类的子类