从超类的数组调用子类的方法
Calling a Method of a Subclass From an Array of the Superclass
请考虑以下事项。
您有一只狗 Class 和一只猫 Class,它们都扩展了 Class 动物。
如果您创建一个 Animals 数组,例如
Animal[] animals = new Animal[5];
在这个数组中 5 随机猫和狗被设置为每个元素。
如果 Dog Class 包含方法 bark()
而 Cat Class 不包含,那么如何根据数组调用此方法?例如
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
}
}
请考虑以下事项。 您有一只狗 Class 和一只猫 Class,它们都扩展了 Class 动物。 如果您创建一个 Animals 数组,例如
Animal[] animals = new Animal[5];
在这个数组中 5 随机猫和狗被设置为每个元素。
如果 Dog Class 包含方法 bark()
而 Cat Class 不包含,那么如何根据数组调用此方法?例如
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
}
}