Полиморфизм

Полиморфизм (от греческого слова, означающего "много форм") — свойство, которое позволяет использовать один и тот же интерфейс для общего класса действий. Конкретное действие определяется конкретным характером ситуации.

Рассмотрим стек (представляющий собой список типа "последним вошел, первым вышел"). Может существовать программа, которая требует применения трех типов стеков. Один стек используется для целочисленных значений, один — для значений с плавающей точкой и один — для символов. Алгоритм реализации каждого из этих стеков остается неизменным, несмотря на различие хранящихся в них данных. В не объектно-ориентированном языке пришлось бы создавать три различных набора подпрограмм стека, каждый из которых должен был бы иметь отдельное имя. Однако в Java, благодаря полиморфизму, можно определить общий набор подпрограмм стека, использующих одни и те же имена.

В более общем виде концепцию полиморфизма часто выражают фразой "один интерфейс, несколько методов". Это означает, что можно спроектировать общий интерфейс для группы связанных между собой действий. Этот подход позволяет уменьшить сложность программы, поскольку один и тот же интерфейс используется для указания общего класса действий. Выбор же конкретного действия (т.е. метода), применимого к каждой ситуации — задача компилятора. Программисту не нужно осуществлять этот выбор вручную. Необходимо лишь помнить об общем интерфейсе и применять его.

Если продолжить аналогию с собаками, можно сказать, что собачье обоняние — полиморфное свойство. Если собака ощутит запах кошки, она залает и погонится за ней. Если собака ощутит запах своего корма, у нее начнется слюноотделение, и она поспешит к своей миске. В обеих ситуациях действует одно и то же чувство обоняния. Различие в том, что издает запах — т.е. в типе данных, воздействующих на нос собаки! Эту же общую концепцию можно реализовать в Java применительно к методам внутри программы.