Что такое полиморфизм в Java и для чего он нужен?

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

Ответ

Полиморфизм (многоформенность) в Java — это возможность объектов разных классов обрабатываться через общий интерфейс или родительский класс. Он позволяет писать более гибкий, расширяемый и поддерживаемый код.

Пример полиморфизма:

abstract class Shape {
    abstract double area();
}

class Circle extends Shape {
    private double radius;
    Circle(double r) { this.radius = r; }
    @Override
    double area() { return Math.PI * radius * radius; }
}

class Rectangle extends Shape {
    private double width, height;
    Rectangle(double w, double h) { this.width = w; this.height = h; }
    @Override
    double area() { return width * height; }
}

public class Main {
    public static void main(String[] args) {
        Shape[] shapes = new Shape[] {
            new Circle(5),
            new Rectangle(4, 6)
        };

        for (Shape shape : shapes) {
            // Вызовется соответствующая реализация area()
            System.out.println("Площадь: " + shape.area());
        }
    }
}

Преимущества полиморфизма:

  1. Снижение связанности: Код работает с абстракцией (Shape), а не с конкретными классами.
  2. Расширяемость: Можно добавить новый класс (например, Triangle), не изменяя существующий код, который использует Shape.
  3. Упрощение кода: Один метод может работать с разными типами объектов.

Типы полиморфизма в Java:

  • Полиморфизм во время выполнения (переопределение методов) — как в примере выше.
  • Полиморфизм во время компиляции (перегрузка методов) — несколько методов с одним именем, но разными параметрами.