04.01.2018
Такой вопрос на знание Java часто любят задавать на собеседованиях. Предположим, у вас имеется интерфейс, его реализация и наследник этой реализации.
А также имеется набор из трёх перегруженных методов. Один принимает этот интерфейс, другой - реализацию, а третий - наследника.
Вопрос: какой из этих методов будет использован, если мы захотим вызвать метод over() и передадим в него null?
Ответ: в таком случае на экране мы увидим слово «Child».
Поэтому можно выделить для себя такое мнемоническое правило, что при передаче null в перегруженный метод всегда будет использоваться наиболее частная реализация (наследник).
P.S. Пример несколько синтетический. На практике я бы избегал ситуации, когда в метод нужно передавать null. Вполне вероятно, что если внутри него нет специальной проверки, то будет NullPointerException.
Также я бы избегал перегрузки методов. Это может и выглядит красиво, но в Enterprise-приложениях, когда у вас over 9000 классов, это вносит дополнительную сложность в понимании.
Отсюда мораль для работодателей: не задавайте на собеседованиях глупых вопросов! А если кто-то любит писать такой код, то лучше его сразу уволить)
Тэги: Java, головоломки, ООП.
Функции для работы с датой и временем в Oracle
RowMapper и ResultSetExtractor в Spring Boot
Обновление записи через DELETE-запрос в Spring Boot
Обновление записи через PUT-запрос в Spring Boot
Добавление записи через POST-запрос в Spring Boot
Java rest Spring Boot Java 8 maven Collections Stream API PostgreSQL ООП головоломки Spring Apache SQL Java 9 Oracle