Выбор ответа Junior ООП и класс Object спрашивают часто обновлено

Перегрузка и объявленный тип

Вопрос

Что выведет код?

static void print(Object o) { System.out.println("Object"); }
static void print(String s) { System.out.println("String"); }

Object x = "hello";
print(x);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Object. Перегрузка выбирается компилятором по объявленному типу аргумента.

Варианты ответа

  1. String
  2. Objectправильный ответ
  3. Ошибка компиляции: неоднозначный вызов
  4. Зависит от JVM

Разбор

Перегрузка выбирается компилятором по объявленному типу аргумента. Переменная x объявлена как Object, значит вызывается print(Object). Ответ String был бы при переопределении (выбор по реальному объекту), но тут перегрузка. Неоднозначности нет: для Object подходит ровно один метод.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.