Добавить в корзинуПозвонить
Найти в Дзене
yagdmitrij

Создание интерфейсов java

На первый взгляд может показаться, что интерфейсы бесполезны и их назначение неочевидно. Однако, углубившись в изучение этого вопроса, понимаешь, что это совсем не так.
Можно долго рассуждать об их практическом применении, достоинствах и недостатках, но лучше всего материал усваивается на наглядных примерах кода.
Для начала разберём, что такое интерфейс в java. Это ссылочный тип данных, который

На первый взгляд может показаться, что интерфейсы бесполезны и их назначение неочевидно. Однако, углубившись в изучение этого вопроса, понимаешь, что это совсем не так.

Можно долго рассуждать об их практическом применении, достоинствах и недостатках, но лучше всего материал усваивается на наглядных примерах кода.

Для начала разберём, что такое интерфейс в java. Это ссылочный тип данных, который определяет набор методов без их реализации — своего рода «контракт», описывающий, что должен делать класс, но не как это делать. Реализация же («как это делать») предоставляется классу, который реализует данный интерфейс.

Поэтому все методы в интерфейсе не имеют тела — или почти все. Исключение составляют методы по умолчанию (default), стаические и закрытые ( private), которые были добавлены в java позже (начиная с версии 8). По сути, можно сказать, что интерфейс содержит абстрактные методы — за исключением вышеописанных методов.

Создаются интерфейсы с помощью ключевого слова interface, а реализация интерфейсов осуществляется с помощью другого ключевого слова – implements.

Важный момент! Класс, реализующий интерфейс, обязан реализовать и все его методы, за исключением метода по умолчанию (об этом немного позже). Если класс реализует не все методы интерфейса, то он должен быть объявлен как abstract.

интерфейс
интерфейс

Рассмотрим ситуацию, когда класс не реализует все методы интерфейса. Чтобы продемонстрировать это, добавим в интерфейс дополнительный метод name() — он будет выводить название соответствующего класса. При выполнении кода возникнет ошибка, поскольку класс не содержит реализации нового метода.

интерфейс
интерфейс

Теперь класс Plus сделаем абстрактным и расширим его новым классом PlusNew, в котором реализуем отсутствующий метод name(). Это значит, что если класс не реализует все методы интерфейса, он должен быть абстрактным. Суть здесь такова, что каждый класс переопределяет (реализует) методы интерфейса по-своему. Листаем галерею:

Не будем подробно останавливаться на всех достоинствах интерфейсов, но перечислим ключевые принципы для чего нужен интерфейс. Во‑первых, один интерфейс может включать множество методов — это видно на приведённом выше примере: классы реализуют одни и те же методы, но каждый по‑своему. Во‑вторых, с помощью интерфейсной ссылки можно получить доступ к реализованным методам в закрытом классе. Разберём этот момент подробнее.

интерфейс
интерфейс

Интерфейсы, так же как и классы, могут наследовать друг друга. Наследование интерфейсов java позволяет создавать иерархию интерфейсов. Интерфейсы могут наследоваться друг от друга с помощью ключевого слова extends. Дочерний интерфейс наследует все методы родительского. Класс, реализующий дочерний интерфейс, должен реализовать методы обоих интерфейсов.

Сначала попробуем реализовать лишь метод из интерфейса Interface_Nasledovanie_1, который расширяет интерфейс Interface_Nasledovanie. Однако эта попытка приводит к ошибке: в классе Class_Nasledovanie необходимо также реализовать метод name(), объявленный в интерфейсе Interface_Nasledovanie. Следовательно, если один интерфейс наследует другой, класс, реализующий дочерний интерфейс, должен содержать реализации методов всех родительских интерфейсов.

интерфейс
интерфейс

До выпуска JDK 8 любой класс, реализующий интерфейс, обязан был предоставлять реализации всех его методов. Такая модель накладывала существенные ограничения: внесение изменений в интерфейс неизбежно приводило к нарушению совместимости с существующими классами, реализующими этот интерфейс. Для устранения данного ограничения в Java 8 были введены методы по умолчанию (default methods). Эти методы, в отличие от традиционных методов интерфейса, содержат полную реализацию (тело метода) и не требуют обязательного переопределения в классах, реализующих интерфейс. Записывается данный метод следующим образом:

default String имя_метода () {

тело метода

}

Смотрим и обращаем внимание, что класс Class_Default метод по умолчанию name() не переопределяет и вызывается его реализация по умолчанию.

интерфейс
интерфейс

Однако такой метод может быть и переопределен классом и тогда будет вызываться его переопределенная реализация. Это интересный момент, который следует рассмотреть:

интерфейс
интерфейс

Завершим обзор рассмотрением статических и закрытых методов интерфейса.

Статические методы интерфейса функционируют аналогично статическим методам класса: они принадлежат исключительно самому интерфейсу. Такие методы не подлежат переопределению, а их вызов осуществляется посредством указания имени интерфейса с последующей точкой.

Закрытые методы интерфейса ограничены областью его определения и используются преимущественно для исключения дублирования кода внутри интерфейса.

Далее проиллюстрируем данные концепции на примерах:

интерфейс
интерфейс

Понимание того, что такое интерфейс, чем он отличается от класса java, как его организовывать, реализовывать и расширять, критически важно для современного Java‑разработчика. Знание принципов интерфейса и особенностей наследования интерфейсов java помогает создавать гибкий, модульный и масштабируемый код. Грамотное использование архитектуры интерфейса позволяет следовать лучшим практикам проектирования и создавать качественное программное обеспечение.

Ставьте лайки, подписывайтесь на канал и вас ждет масса интересных статей по программированию.

моя телега