Java参数多态示例

标签 java generics polymorphism

我有一个关于参数多态性的问题。如果我有一个混合了子类型的集合,如何确定实际类型并避免强制转换。例如

    class Animal{

    }

    class Bird extends Animal{
          void fly(){}
    }

    class Dog extends Animal{
          void bark(){}
    }

    ArrayList<Animal> list = new ArrayList<Animal>();

问题是当我迭代 Animal 集合时,我如何知道哪个是哪个。我每次都需要使用instanceof来检查实际类型吗?

    for(Animal animal : list){
          if(animal instanceof Dog){
                ((Dog) animal).bark();
          } 
          else ((Bird) animal).fly();             
    }

最佳答案

如果您需要执行此操作,则意味着这是一个常见操作。你通常会有这样的:

abstract class Animal {
     abstract void act();
}

class Bird extends Animal{
      void fly(){}
      void act(){
         fly();
      }
}

class Dog extends Animal{
      void bark(){}
      void act(){
         bark();
      }
}

在循环中,您只需调用 act 方法:

for(Animal animal : list){
    animal.act();
}

关于Java参数多态示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404865/

相关文章:

java - 直接从 XML 获取孙子元素

java - 如何在 LWJGL 中将纹理正确映射到六边形?

java - JVM如何解析java中的重写和覆盖方法

oop - 后期绑定(bind)与多态性 - 有什么区别?

java - java中对象的内存分配

java - 如何使用 OSGI 打包和使用现有的 Java 库

swift - 将 swift 泛型类型与协议(protocol)结合使用

java - 无法在 Java 中调用通用对象的方法

java - java 有界泛型与策略模式之间的区别

java - 多态性、自动装箱和隐式转换