Вопрос с собеседования · Java

Что верно про полиморфизм в Java?

MiddleООП
Коротко

Динамически (по реальному классу объекта) выбираются только переопределённые методы экземпляра. Статические методы скрываются, а не переопределяются: вызов определяется объявленным типом ссылки. Поля не полиморфны — тоже по объявленному типу.

  • Приватные и final-методы не переопределяются
  • Перегрузка выбирается на компиляции — не полиморфизм подтипов
  • JIT убирает виртуальный вызов, если реализация одна (девиртуализация)

А ещё Parent p = new Child(); p.staticMethod() — вызовет метод Parent

Подробно

Полиморфизм подтипов работает через таблицу виртуальных методов и потому применим лишь к методам экземпляра. Статический метод с той же сигнатурой в подклассе не переопределяет родительский, а скрывает его: какой вызовется, определяет объявленный тип ссылки — отсюда классический вопрос-ловушка на собеседовании. Поля ведут себя так же: у подкласса и суперкласса может быть по полю с одним именем, и выбор идёт по типу ссылки, а не объекта. Перегрузка к полиморфизму подтипов отношения не имеет — это выбор метода по типам аргументов на этапе компиляции, иногда его называют ad hoc полиморфизмом. Практический вывод: скрывать статические методы и поля не стоит — код становится непредсказуемым для читателя.

Что хотят услышать

  • Что диспетчеризуется динамически.
  • Скрытие статических методов и полей.

Частые ошибки

  • Ожидать от статических методов полиморфного поведения.
  • Смешивать переопределение и перегрузку в одном ответе.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Переопределённый метод выбирается в рантайме по классу объекта
  • ✓Статические методы не переопределяются, а скрываются
  • ✗Перегрузка (overloading) — разновидность полиморфизма подтипов, ведь метод тоже выбирается в рантайме
  • ✓Поле выбирается по объявленному типу ссылки, а не полиморфно

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

  • Что такое ковариантный тип возвращаемого значения?
  • Почему private-метод нельзя переопределить?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования