Gymterview
junior

Объясните выражение System.out::println

Выражение System.out::println является ссылкой на метод экземпляра (instance method reference). Здесь System.out — это конкретный объект типа PrintStream, хранящийся в статическом поле out класса System, а println — вызываемый метод этого объекта.

Эта ссылка эквивалентна лямбда-выражению x -> System.out.println(x). Она часто используется как аргумент forEach():

Пример
List.of("a", "b", "c").forEach(System.out::println);

Тип функционального интерфейса определяется контекстом: в случае forEach() это Consumer<T>, поскольку println принимает аргумент и ничего не возвращает. Компилятор автоматически подбирает нужную перегрузку println на основе типа элементов.

На собеседовании: ключевое слово здесь — «ссылка на метод конкретного экземпляра». Уточните, что System.out — не класс, а объект, и что тип ссылки зависит от контекста использования.