Эти методы «перегружены», а не «неоднозначны».
Согласно Спецификация языка Java :
Когда метод вызывается (§15.12),
количество фактических аргументов (и любой
явные аргументы типа) и
типы времени компиляции аргументов
используются во время компиляции, чтобы
определить сигнатуру метода
это будет вызвано (§15.12.2).
И в §15.12.2 говорится:
Может быть несколько таких
метод, в этом случае большинство
конкретный выбран.
String
более специфичен, чем Object
, поэтому, хотя null
совместим с обоими, выбран метод с параметром String
(существуют гораздо более сложные правила, которые применяются, когда типы параметров являются частью класс или интерфейсная иерархия).