Как реализовать полиморфизм в Java?

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

Ответ

Полиморфизм в Java реализуется через наследование классов или реализацию интерфейсов, где метод, объявленный в родительском типе, по-разному выполняется в дочерних типах.

Ключевые шаги:

  1. Создать общий тип (абстрактный класс или интерфейс) с объявленным методом.
  2. Создать конкретные классы, которые наследуют или реализуют этот тип.
  3. Переопределить (@Override) общий метод в каждом конкретном классе.
  4. Использовать ссылку на общий тип для работы с объектами разных конкретных классов.

Пример с интерфейсом:

interface Shape {
    double getArea(); // Общий метод
}

class Circle implements Shape {
    private double radius;
    public Circle(double r) { this.radius = r; }
    @Override
    public double getArea() {
        return Math.PI * radius * radius; // Своя реализация
    }
}

class Square implements Shape {
    private double side;
    public Square(double s) { this.side = s; }
    @Override
    public double getArea() {
        return side * side; // Другая реализация
    }
}

// Использование полиморфизма
Shape shape1 = new Circle(5.0);
Shape shape2 = new Square(4.0);
System.out.println(shape1.getArea()); // 78.5398...
System.out.println(shape2.getArea()); // 16.0

Почему это работает: Во время выполнения (Runtime) JVM определяет фактический тип объекта и вызывает соответствующую переопределенную версию метода. Это основа позднего связывания (late binding).