java - 从父类(super class)对象列表获取子类

标签 java

我有一个类,比方说 - 动物。还有几个继承自它的类,例如:BirdCatDog

现在我创建一个 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/

相关文章:

java - 改造GSON响应抽象映射

java - 以 UTF-8 序列化 DOM 文档

java - 从子类引用静态方法是不好的做法吗?

java - 用 ArrayList 或 TreeSet 优化代码?

java - 从 Eclipse 中的 Active Help 页面启动向导

java - 显示字符串中的字符数

java - Java 中的简单 REST Jersey 示例不起作用

java - 2个字的字谜

java - 如何在链表节点中创建字符串数组

Java PrintWriter 不工作