В объектно-ориентированном программировании
Принцип, позволяющий обращаться к объектам разных классов через общий интерфейс. Программа использует единый вызов метода, а конкретная реализация выбирается в зависимости от типа объекта во время выполнения (динамический полиморфизм) или на этапе компиляции (статический).
Близкие слова
- многочисленность форм
- разнообразие реализаций
Вызов метода draw() у объектов Circle и Square приводит к отрисовке разных фигур.
Функция print_info принимает любой объект, реализующий интерфейс Printable.
В биологии и генетике
Наличие в популяции одного вида двух или более дискретных форм (морф), отличающихся друг от друга. Часто используется для описания вариативности признаков, не связанных с половым диморфизмом.
Близкие слова
- многочисленность морф
- вариативность форм
Полиморфизм окраски крыльев у бабочек вида Papilio memnon.
Генетический полиморфизм популяции по группе крови.
Полиморфизм в коде: динамический и статический
В программировании важно различать два основных типа полиморфизма. Динамический полиморфизм достигается через наследование и переопределение методов: вызывается тот метод, который принадлежит реальному типу объекта в момент исполнения кода. Статический полиморфизм (перегрузка методов) определяется компилятором на основе типов аргументов переданной функции. Оба механизма позволяют писать гибкий код, но служат разным архитектурным целям.
Отличие от инкапсуляции и наследования
Полиморфизм часто путают с другими принципами ООП. Если инкапсуляция скрывает внутреннее устройство объекта, а наследование позволяет повторно использовать код родительского класса, то полиморфизм отвечает за унификацию взаимодействия с разными объектами. Без полиморфизма программисту пришлось бы писать отдельные ветвления условий (if/else) для каждого типа данных, что усложнило бы поддержку кода.