考虑以下。
您有一个狗类和一个猫类,它们都扩展了动物类。
如果您创建一个动物类数组。

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

09-27 23:13