Альтернативой использованию полиморфизма в 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()
.