Экзамен ООП | Блок 5 Flashcards
Что такое интерфейс?
Интерфейс является разновидностью абстрактного класса и представляет собой следующий шаг на пути к абстракции. Интерфейс позволяет абстрагировать методы-реализации от методов-потребителей. Интерфейс описывает форму, а класс, его реализующий - содержание. Таким образом, это своеобразный “пульт”, с которым взаимодействует метод-потребитель.
Для указания на то, что класс реализует (имплементирует) интерфейс используется ключевое слово implements
. Если класс, реализует не все методы, описанные в интерфейсе, то он должен быть объявлен абстрактным и уже его подклассы должны реализовать недостающие методы.
Интерфейсы могут наследоваться друг от друга и поддерживают множественное наследование. Интерфейсы создают собственную иерархию наследования и позволяют разным классам, никак не связанным друг с другом по иерархии, реализовывать один и тот же интерфейс.
Допустимые модификаторы доступа: По умолчанию
и public
. Для методов интерфейса неявно устанавливается модификатор public
. Сам интерфейс должен быть явно объявлен как public
.
Перечислите элементы, которые может содержать интерфейс.
- Поля (public, static, final) - Константы;
- Методы;
- Вложенные / внутренние классы и интерфейсы;
- Обобщенные типы (generics);
- Перечисления (ENUM);
Можно ли создать объект интерфейса? Если да, то как?
Интерфейс не может содержать конструкторов, так как интерфейс - это абсолютная абстракция, то есть вся реализация возложена на классы-реализации. По причине отсутствия конструкторов создать экземпляр интерфейса невозможно.
Может ли интерфейс содержать какие-либо методы с реализацией? Если да, то какие?
- Статические методы (static) - не наследуются. Используются для сохранения данных на уровне интерфейса.
- Дефолтные методы (default) - наследуются, могут быть переопределены в реализующем классе или интерфейсе - наследнике.
- Приватные методы (private) - могут быть static и нестатическими. Используются как служебные, для избежания дублирования кода.
Чем отличается интерфейс от абстрактного класса?
Интерфейс является абстрактным классом, но не наоборот.
Абстрактный класс - это класс, у которого не реализован один и более методов. Нужен для реализации семейства классов (Отношение IS-A). Выглядит как заготовка под будущую реализацию. Также это средство для повторного использования кода.
Интерфейс - это абстрактный класс, в котором все методы не реализованы (помимо default, private, static), а также нет нестатических переменных.
Интерфейс задаёт семантику класса. Вы всегда будете уверены, что класс, который реализует какой-либо интерфейс, реализует и все его методы, то есть поддерживает заданную семантику.