Что такое интерфейсы и для чего они используются
Что проверяют
Актуальность знаний. Определение из старых учебников, где интерфейс это только абстрактные методы и константы, давно неверно, и интервьюер обычно ждёт, назовёте ли вы методы с реализацией по умолчанию и понимаете ли, зачем их ввели.
Как отвечать
Интерфейс задаёт контракт: набор сигнатур, которые реализующий класс обязан поддержать, без привязки к иерархии наследования. Класс наследуется от одного класса, но реализует сколько угодно интерфейсов, поэтому интерфейс описывает роль, а не происхождение.
Что в нём может лежать в современной Java: абстрактные методы, методы с реализацией по умолчанию, статические методы, приватные методы для переиспользования кода внутри самого интерфейса и поля, которые всегда открытые статические и неизменяемые. Состояния у интерфейса нет, и это главное отличие от абстрактного класса; второе в том, что у абстрактного класса есть конструктор и защищённые поля.
Зачем применяют: подмена реализации в тестах, полиморфизм, развязка модулей, когда модуль зависит от интерфейса, а реализацию приносят снаружи, и функциональные интерфейсы с одним абстрактным методом как тип для лямбды.
Методы по умолчанию появились, чтобы расширять существующие интерфейсы, не ломая всех, кто их уже реализовал. Запечатанные интерфейсы решают обратную задачу: ограничивают список реализаций и дают исчерпывающий разбор по типу.
Где спотыкаются
Отвечают определением про одни лишь абстрактные методы, а следом не могут сказать, что будет при конфликте двух одинаковых методов по умолчанию из разных интерфейсов. Компилятор потребует явного переопределения с вызовом нужной реализации через имя интерфейса.
Заводят интерфейс на каждый класс ради тестируемости, даже когда реализация одна и второй не предвидится. Получается лишний слой, который приходится править парой файлов при каждом изменении сигнатуры.
Разделяют интерфейс и абстрактный класс по признаку наличия реализации. Реализация сейчас есть у обоих, различие в состоянии, конструкторе и в том, что интерфейсов класс реализует сколько нужно, а класс наследует один.