Интерфейс (Ява)


Интерфейс в языке программирования Java это абстрактный тип , используемый для описания поведения, которое должны реализовать классы . Они аналогичны протоколам . Интерфейсы объявляются с использованием ключевого слова и могут содержать только сигнатуру метода и объявления констант (объявления переменных, объявленные как и , и ). Все методы интерфейса не содержат реализации (тела методов) во всех версиях ниже Java 8. Начиная с Java 8, методы могут иметь реализацию в определении. [1] Затем в Java 9 иinterface staticfinaldefaultstaticinterfaceprivateprivate staticбыли добавлены методы. В настоящее время интерфейс Java может иметь до шести различных типов.

Интерфейсы не могут быть созданы , а реализованы. Класс, реализующий интерфейс, должен реализовывать все нестандартные методы, описанные в интерфейсе, или быть абстрактным классом . Ссылки на объекты в Java могут иметь тип интерфейса; в каждом случае они должны быть либо нулевыми , либо быть привязанными к объекту, реализующему интерфейс.

Одним из преимуществ использования интерфейсов является то, что они имитируют множественное наследование . Все классы в Java должны иметь ровно один базовый класс , единственным исключением является java.lang.Object( корневой класс системы типов Java ); множественное наследование классов не допускается. Однако интерфейс может наследовать несколько интерфейсов, а класс может реализовывать несколько интерфейсов.

Интерфейсы используются для кодирования сходств, которые разделяют классы различных типов, но не обязательно составляют отношения классов. Например, свистеть могут и человек , и попугай ; однако не имеет смысла представлять s и s как подклассы класса. Скорее всего, они являются подклассами класса (вероятно, с промежуточными классами), но оба будут реализовывать интерфейс.HumanParrotWhistlerAnimalWhistler

Другое использование интерфейсов — это возможность использовать объект , не зная его типа класса, а только то, что он реализует определенный интерфейс. Например, если кого-то раздражает свистящий звук, он может не знать, человек это или попугай, потому что все, что можно определить, это то, что свистит свистящий. Вызов whistler.whistle()вызовет реализованный метод whistleобъекта whistlerнезависимо от того, какой у него класс, при условии, что он реализует Whistler. В более практическом примере алгоритм сортировки может ожидать объект типа Comparable. Таким образом, не зная конкретного типа, он знает, что объекты этого типа можно каким-то образом сортировать.

Тело интерфейса содержит абстрактные методы , но поскольку все методы в интерфейсе по определению являются абстрактными, abstractключевое слово не требуется. Поскольку интерфейс задает набор доступных вариантов поведения, все методы являются неявными public.