Что верно про полиморфизм в Java?
Динамически (по реальному классу объекта) выбираются только переопределённые методы экземпляра. Статические методы скрываются, а не переопределяются: вызов определяется объявленным типом ссылки. Поля не полиморфны — тоже по объявленному типу.
- Приватные и final-методы не переопределяются
- Перегрузка выбирается на компиляции — не полиморфизм подтипов
- JIT убирает виртуальный вызов, если реализация одна (девиртуализация)
А ещё Parent p = new Child(); p.staticMethod() — вызовет метод Parent
Подробно
Полиморфизм подтипов работает через таблицу виртуальных методов и потому применим лишь к методам экземпляра. Статический метод с той же сигнатурой в подклассе не переопределяет родительский, а скрывает его: какой вызовется, определяет объявленный тип ссылки — отсюда классический вопрос-ловушка на собеседовании. Поля ведут себя так же: у подкласса и суперкласса может быть по полю с одним именем, и выбор идёт по типу ссылки, а не объекта. Перегрузка к полиморфизму подтипов отношения не имеет — это выбор метода по типам аргументов на этапе компиляции, иногда его называют ad hoc полиморфизмом. Практический вывод: скрывать статические методы и поля не стоит — код становится непредсказуемым для читателя.
Что хотят услышать
- Что диспетчеризуется динамически.
- Скрытие статических методов и полей.
Частые ошибки
- Ожидать от статических методов полиморфного поведения.
- Смешивать переопределение и перегрузку в одном ответе.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Переопределённый метод выбирается в рантайме по классу объекта
- ✓Статические методы не переопределяются, а скрываются
- ✗Перегрузка (overloading) — разновидность полиморфизма подтипов, ведь метод тоже выбирается в рантайме
- ✓Поле выбирается по объявленному типу ссылки, а не полиморфно
Что спросят дальше
- Что такое ковариантный тип возвращаемого значения?
- Почему private-метод нельзя переопределить?
Разбор темы
- ООП и его принципы
Инкапсуляция, наследование, полиморфизм, абстракция — зачем они нужны, как работают внутри и почему композицию предпочитают наследованию.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.