首页 > 解决方案 > Java中的多态性有什么替代方法吗?

问题描述

我正在阅读一篇关于 Java 面试常见问题的文章,并被困在一个问题上:“多态性的替代方案是什么?”

我搜索了它,但没有得到任何合理的答案。

Java中是否有替代多态性的方法?如果是,那是什么?

标签: javapolymorphism

解决方案


在 Java 中使用多态的替代方法是使用instanceof和类型转换。

这不是很好的选择...

这是一个例子来说明我的意思:

   public interface Animal {
       String makeSound();  // polymorphic method ...
   }
   public class Cat implements Animal {
       public String makeSound() { return "meow"; }
   }
   public class Dog implements Animal {
       public String makeSound() { return "woof"; }
   }

   // polymorphic:
   Animal someAnimal = ...
   System.out.println("Animal sound is " + someAnimal.makeSound());

   // non-polymorphic
   if (someAnimal instanceof Cat) {
       System.out.println("Animal sound is " + ((Cat) someAnimal).makeSound()); 
   } else if (someAnimal instanceof Dog) {
       System.out.println("Animal sound is " + ((Dog) someAnimal).makeSound()); 
   }

请注意,非多态版本显然更冗长。但问题是,非多态版本将工作,如果Cat并且Dog没有与makeSound()方法的公共接口。


推荐阅读