Вопрос был озвучен на собеседовании:
void test(String s) {...}
void test(Object s) {...}
test(null);
Почему вызывается test(String s)?
Если вы перегружаете метод, то будет вызван тот метод, у которого типы аргументов наиболее близко совпадают с тем типом параметров, переданных при вызове.
Как определяется близость? По принципу от конкретного к более общему.
Рассмотрим ваш пример:
Есть метод принимающий String, есть метод принимающий Object. String наследуется от Object.
null является String? Да является, следовательно, выбирается метод принимающий параметр с данным типом.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники