Интерфесы, в откличии от классов, содержат сигнатуры методов без описания и свойства-константы.
Все методы интерфейса являются public abstract, и эти модификаторы необязательны.
Все свойства интерфейса автоматически являются public final static, так что эти модификаторы указывать необязательно и даже нежелательно, чтобы не загромождать код. Это означает, что класс реализации не может изменять их значения. Кроме того, при объявлении переменных в интерфейсе их обязательно нужно инициализировать константными значениями.
Интерфейс
interface имя { тип_результата имя_метода1 (список параметров); тип имя_finall_переменной = значение; }
Обратите внимание — у объявляемых в интерфейсе методов отсутствуют операторы тела. Объявление методов завершается символом «;» (точка с запятой). Рассмотрим пример определения интерфейса, содержащего единственный метод с именем callback и одним параметром типа int.
Определение интерфейса.
interface Callback { void callback(int param); }
После определения интерфейса, мы можем создать класс, реализующий интерфейс. Для этого необходимо использовать оператор implements.
Реализация интерфейса
class Client implements Callback { void callback(int p) { System.out.println("callback вызван с " + p); } }
Основным преимуществом интерфейсов, в сравнении с обычными классами является возможность реализации множественного наследования.
Реализация множественного наследования:
interface A { int getValue(); } interface B { double getDoubleValue(); } public class Correct implements A, B // класс правильно наследует int getValue() { return 5; } double getDoubleValue() { return 5.5; } }
Интерфейс Java, подобно классам, могут наследоваться от другого интерфейса. Как и при расширении класса, используется ключевое слово extends.
interface Name1 extends Name2 { // тело интерфейса }