Интерфейсы Java — это языковые конструкции, определяющие контракт, которому должны следовать классы. Они определяют набор методов, которые должен предоставить класс, реализующий интерфейс. Вот некоторые часто используемые методы и концепции, связанные с интерфейсами Java:
-
Абстрактные методы. Интерфейсы могут содержать абстрактные методы, определяющие поведение без предоставления реализации. Эти методы неявно общедоступны и абстрактны.
-
Методы по умолчанию. В Java 8 в интерфейсах появились методы по умолчанию. Эти методы имеют реализацию по умолчанию, которую могут использовать классы, реализующие интерфейс. Методы по умолчанию полезны для добавления новых функций к существующим интерфейсам, не нарушая при этом классы, которые их реализуют.
-
Статические методы. Начиная с Java 8, интерфейсы также могут включать статические методы. Эти методы связаны с самим интерфейсом и могут быть вызваны с использованием имени интерфейса.
-
Функциональные интерфейсы. Функциональный интерфейс — это интерфейс, содержащий только один абстрактный метод. Функциональные интерфейсы широко используются в лямбда-выражениях и конструкциях функционального программирования Java 8. Пакет
java.util.functionпредоставляет набор функциональных интерфейсов для распространенных случаев использования, таких какPredicate,Consumer,Functionи т. д. -
Интерфейсы маркеров. Интерфейсы маркеров не объявляют никаких методов. Они служат маркерами, указывающими на определенные способности или поведение. Примеры интерфейсов маркеров в Java включают
SerializableиCloneable. -
Наследование: интерфейсы могут наследовать от других интерфейсов с помощью ключевого слова
extends. Это позволяет создавать иерархические интерфейсы. -
Множественное наследование. В отличие от классов, интерфейсы Java поддерживают множественное наследование. Класс может реализовывать несколько интерфейсов, что позволяет ему предоставлять реализации методов, определенных в каждом интерфейсе.
-
Реализация. Чтобы использовать интерфейс, класс должен реализовать его с помощью ключевого слова
implements. Класс реализации должен обеспечивать реализацию всех методов, объявленных в интерфейсе. -
Переменные интерфейса. Интерфейсы могут иметь переменные, которые неявно являются
public,staticиfinal. Эти переменные должны быть инициализированы при объявлении и не могут быть переназначены. -
Полиморфизм. Интерфейсы допускают полиморфизм, при котором на объект можно ссылаться по его типу интерфейса. Это позволяет писать общий код, который может работать с любым объектом, реализующим определенный интерфейс.