我有一个类,比方说 - 动物
。还有几个继承自它的类,例如:Bird
、Cat
、Dog
。
现在我创建一个 Animal 类型的数组列表,并向其中添加一些子类实例。
private List<Animal> list = new ArrayList<Animal>();
list.add(new Bird());
list.add(new Bird());
list.add(new Cat());
list.add(new Dog());
然后我遍历这个列表,调用一些方法等。
for(int i = 0; i < list.length; i++)
{
list.get(i).makeSound();
}
好吧。但是,如果我想向 Bird
子类添加一个不会在 Animal
父类(super class)中实现的方法,该怎么办?比方说,fly()
方法,所以它看起来像这样:
for(int i = 0; i < list.length; i++)
{
list.get(i).makeSound();
if(list.get(i) instanceof Bird)
{
list.get(i).fly(); // error here
}
}
这是有道理的,但它抛出一个错误 - 找不到符号。在 Animal
类中实现该方法似乎可以解决问题,但当我必须这样做几次时,它会伤害我的眼睛。有办法解决这个问题吗?
最佳答案
您需要转换为Bird
:
((Bird)list.get(i)).fly();
关于java - 从父类(super class)对象列表获取子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205633/