Что такое полиморфизм в ООП?

«Что такое полиморфизм в ООП?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Полиморфизм — это принцип ООП, позволяющий объектам разных типов обрабатываться через единый интерфейс или базовый класс. Это означает «одна форма, множество реализаций».

Основные виды полиморфизма в Java:

  1. Полиморфизм во время выполнения (Runtime / Subtype Polymorphism). Достигается через переопределение методов (override) и наследование. Вызываемый метод определяется типом объекта во время выполнения.

    class Animal {
        void makeSound() { System.out.println("Some sound"); }
    }
    class Dog extends Animal {
        @Override
        void makeSound() { System.out.println("Woof!"); } // Своя реализация
    }
    
    Animal myAnimal = new Dog(); // Ссылка типа Animal, объект типа Dog
    myAnimal.makeSound(); // Вывод: "Woof!" (вызывается метод Dog)
  2. Полиморфизм во время компиляции (Compile-time / Ad-hoc Polymorphism). Достигается через перегрузку методов (overload). Компилятор определяет, какой метод вызвать, на основе сигнатуры (имени и типов параметров).

    class Printer {
        void print(int number) { System.out.println("Printing int: " + number); }
        void print(String text) { System.out.println("Printing String: " + text); } // Перегрузка
    }
    
    Printer p = new Printer();
    p.print(10);   // Вызывается print(int)
    p.print("Hi"); // Вызывается print(String)

Важно: Разные типы данных (например, int, String) сами по себе не являются полиморфизмом. Они становятся частью полиморфного поведения, когда используются в контексте перегрузки методов или единого интерфейса (например, Object).