ENIGMA AI
ENIGMA AI

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

встречается 9× junior oop

Как ответить

Полиморфизм в ООП — это способность объектов разных классов отвечать на одни и те же вызовы методов по-своему. Простыми словами: один интерфейс — много реализаций.

Выделяют два основных вида:

  • Статический (compile-time) полиморфизм — реализуется через перегрузку методов (overloading). Одно имя метода, разные параметры. Решение о том, какую версию вызвать, принимается на этапе компиляции.
  • Динамический (runtime) полиморфизм — реализуется через переопределение методов (overriding) в наследниках. Решение о том, какой метод выполнить, принимается на этапе выполнения, когда известен реальный тип объекта.

Пример динамического полиморфизма на Java:

public class Animal {
    public void sound() {
        System.out.println("Animal makes sound");
    }
}

public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Bark");
    }
}

public class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }
}

// Использование
Animal[] animals = {new Dog(), new Cat()};
for (Animal a : animals) {
    a.sound(); // Выведет 'Bark', затем 'Meow'
}

Это позволяет писать код, работающий с базовым типом (Animal), не завязываясь на конкретные наследники. Новые классы (например, Bird с переопределённым sound()) добавляются без изменения вызывающего кода — принцип открытости/закрытости.

Ключевая польза: упрощается расширение системы, уменьшается связанность модулей. instanceof и if-else по типам — антипаттерн; полиморфизм позволяет этого избежать.

Ключевые тезисы

  • Полиморфизм — способность объектов разных типов реагировать на одинаковые вызовы по-своему.
  • Статический полиморфизм: перегрузка методов (compile-time).
  • Динамический полиморфизм: переопределение методов через наследование/интерфейсы (runtime).
  • Пример: коллекция объектов базового класса и вызов переопределённого метода у каждого наследника.
  • Позволяет писать гибкий, расширяемый код без проверки типов.

Что спросят дальше

  • — Чем отличается перегрузка от переопределения?
  • — Как полиморфизм связан с интерфейсами и абстрактными классами?
  • — Какие проблемы могут возникнуть из-за полиморфизма в многопоточном коде?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение