Что выведет код Middle ООП и класс Object обновлено

Что выведет: перегрузка с null

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

public class Main {
    static void f(Object o) { System.out.println("Object"); }
    static void f(String s) { System.out.println("String"); }
    static void g(Object o) { System.out.println("Object"); }
    static void g(Integer i) { System.out.println("Integer"); }

    public static void main(String[] args) {
        f(null);
        Object x = "text";
        f(x);
        g(42);
        g((Object) 42);
    }
}

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: String, Object, Integer, Object. Для f(null) подходят оба метода, компилятор выбирает самый специфичный: String наследник Object. f(x) выбирается по объявленному типу Object. g(42): во второй фазе int упаковывается в Integer, он специфичнее Object.

Что выведет

String
Object
Integer
Object

Разбор

Для f(null) подходят оба метода, компилятор выбирает самый специфичный: String наследник Object. f(x) выбирается по объявленному типу Object. g(42): во второй фазе int упаковывается в Integer, он специфичнее Object. С явным приведением к Object вызывается g(Object).

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

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