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

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

Ответ

Полиморфизм — это способность объектов с одинаковой спецификацией (интерфейсом/родительским классом) иметь различную реализацию. В Java существует два основных типа:

  1. Полиморфизм во время выполнения (Runtime): Переопределение методов (override).
  2. Полиморфизм во время компиляции (Compile-time): Перегрузка методов (overload).

Пример runtime-полиморфизма через переопределение метода:

// Базовый класс (общий тип)
class Shape {
    void draw() {
        System.out.println("Drawing a generic shape");
    }
}

// Производные классы
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a square");
    }
}

public class PolymorphismDemo {
    public static void main(String[] args) {
        // Ссылка типа Shape, объекты разных типов
        Shape shape1 = new Circle(); // Upcasting
        Shape shape2 = new Square(); // Upcasting
        Shape shape3 = new Shape();

        // Один и тот же метод вызывается, но поведение разное
        shape1.draw(); // Вывод: Drawing a circle
        shape2.draw(); // Вывод: Drawing a square
        shape3.draw(); // Вывод: Drawing a generic shape
    }
}

Ключевой момент: Компилятор видит вызов shape1.draw() как метод класса Shape, но JVM во время выполнения определяет фактический тип объекта (Circle) и выполняет его версию метода. Это и есть полиморфизм.