Java — Интерфейсы
Интерфейс — это ссылочный тип в Java. Это похоже на класс. Это набор абстрактных методов. Класс реализует интерфейс, тем самым наследуя абстрактные методы интерфейса.
Наряду с абстрактными методами интерфейс также может содержать константы, методы по умолчанию, статические методы и вложенные типы. Тела методов существуют только для методов по умолчанию и статических методов.
Написание интерфейса похоже на написание класса. Но класс описывает атрибуты и поведение объекта. А интерфейс содержит поведение, которое реализует класс.
Если класс, реализующий интерфейс, не является абстрактным, все методы интерфейса должны быть определены в классе.
Интерфейс похож на класс в следующих отношениях —
-
Интерфейс может содержать любое количество методов.
-
Интерфейс записывается в файл с расширением .java. расширение, с именем интерфейса, совпадающим с именем файла.
-
Байт-код интерфейса отображается в .class. файл.
-
Интерфейсы появляются в пакетах, и соответствующий им файл байт-кода должен находиться в структуре каталогов, соответствующей имени пакета.
Однако интерфейс отличается от класса несколькими способами, в том числе -
-
Вы не можете создать экземпляр интерфейса.
-
Интерфейс не содержит никаких конструкторов.
-
Все методы интерфейса являются абстрактными.
-
Интерфейс не может содержать поля экземпляра. Единственные поля, которые могут появляться в интерфейсе, должны быть объявлены как статическими, так и окончательными.
-
Интерфейс не расширяется классом; он реализован классом.
-
Интерфейс может расширять несколько интерфейсов.
Объявление интерфейсов
Интерфейс ключевое слово используется для объявления интерфейса. Вот простой пример объявления интерфейса —
Пример
Ниже приведен пример интерфейса —
05
Интерфейсы имеют следующие свойства —
-
Интерфейс неявно абстрактен. Вам не нужно использовать аннотацию ключевое слово при объявлении интерфейса.
-
Каждый метод в интерфейсе также является неявно абстрактным, поэтому ключевое слово abstract не требуется.
-
Методы в интерфейсе неявно общедоступны.
Пример
15пре>Реализация интерфейсов
Когда класс реализует интерфейс, вы можете думать о классе как о подписании контракта, соглашаясь выполнять определенные действия интерфейса. Если класс не выполняет все функции интерфейса, он должен объявить себя абстрактным.
Класс использует приспособления ключевое слово для реализации интерфейса. Ключевое слово "реализует" появляется в объявлении класса после части объявления "extensions".
Пример
22Это даст следующий результат —
Вывод
36При переопределении методов, определенных в интерфейсах, необходимо соблюдать несколько правил —
-
Проверяемые исключения не должны объявляться в методах реализации, отличных от тех, которые объявлены интерфейсным методом, или подклассов тех, которые объявлены интерфейсным методом.
-
Сигнатура метода интерфейса и тот же возвращаемый тип или подтип должны сохраняться при переопределении методов.
-
Сам класс реализации может быть абстрактным, и если это так, методы интерфейса не нужно реализовывать.
При реализации интерфейсов существует несколько правил —
-
Класс может одновременно реализовывать более одного интерфейса.
-
Класс может расширять только один класс, но реализовывать множество интерфейсов.
-
Интерфейс может расширять другой интерфейс подобно тому, как класс может расширять другой класс.
Расширение интерфейсов
Интерфейс может расширять другой интерфейс так же, как класс может расширять другой класс. расширяется ключевое слово используется для расширения интерфейса, а дочерний интерфейс наследует методы родительского интерфейса.
Следующий спортивный интерфейс расширен интерфейсами хоккея и футбола.
Пример
44
Интерфейс Hockey имеет четыре метода, но два он унаследовал от Sports; таким образом, класс, реализующий Hockey, должен реализовать все шесть методов. Точно так же класс, реализующий Football, должен определить три метода из Football и два метода из Sports.
Расширение нескольких интерфейсов
Класс Java может расширять только один родительский класс. Множественное наследование не допускается. Однако интерфейсы не являются классами, и интерфейс может расширять несколько родительских интерфейсов.
Ключевое слово extends используется один раз, а родительские интерфейсы объявляются в списке, разделенном запятыми.
Например, если бы интерфейс Hockey расширял возможности как Sports, так и Event, он был бы объявлен как −
Пример
53
Тегирование интерфейсов
Чаще всего расширяющие интерфейсы используются, когда родительский интерфейс не содержит никаких методов. Например, интерфейс MouseListener в пакете java.awt.event расширил java.util.EventListener, который определяется как -
Пример
65
Интерфейс без методов называется тегированием. интерфейс. Есть две основные цели дизайна тегов интерфейсов —
Создает общий родитель − Как и в случае с интерфейсом EventListener, который расширен десятками других интерфейсов в API Java, вы можете использовать интерфейс тегов для создания общего родителя среди группы интерфейсов. Например, когда интерфейс расширяет EventListener, JVM знает, что этот конкретный интерфейс будет использоваться в сценарии делегирования событий.
Добавляет тип данных в класс − Именно из этой ситуации произошел термин «тегирование». Классу, реализующему интерфейс тегов, не нужно определять какие-либо методы (поскольку у интерфейса их нет), но класс становится интерфейсным типом благодаря полиморфизму.
java