Объявление интерфейсов очень похоже на упрощенное объявление классов.
Оно начинается с заголовка. Сначала указываются модификаторы. Интерфейс может быть объявлен как public и тогда он будет доступен для того использования, либо модификатор доступа может не указываться, в этом случае интерфейс доступен только для типов своего пакета. Модификатор abstract для интерфейса не требуется, поскольку все интерфейсы являются абстрактными. Его можно указать, но делать этого не рекомендуется, чтобы не загромождать код. Далее записывается ключевое слово interface и имя интерфейса.
После этого может следовать ключевое слово extends и список интерфейсов, от которых будет наследоваться объявляемый интерфейс. Родительских типов может быть много, главное, чтобы не было повторений и чтобы отношение наследования не образовывало циклической зависимости.
Наследование интерфейсов действительно очень гибкое. Так, если есть два интерфейса, А и В, причем В наследуется от А, то новый интерфейс С может наследоваться от них обоих. Впрочем, понятно, что указание наследования от А является избыточным, все элементы этого интерфейса и так будут получены по наследству через интерфейс В.
Затем в фигурных скобках записывается тело интерфейса.
public interface Drawble extends Colorable, Resizable {}
Тело интерфейса состоит из объявления элементов, то есть полей-констант и абстрактных методов.
Все поля интерфейса должны быть public final static, так что эти модификаторы указывать необязательно и даже нежелательно, чтобы не загромождать код. Поскольку поля объявляются финальными, необходимо их сразу инициализировать.
public interface Directions {intRIGTH=1;
int LETFT=2;
int UP=3;
int D0WN=4; }
Bee методы интерфейса являются public abstract и эти модификаторы также необязательны.
public interface Moveable {
void moveRightO;
void moveLeft{);
void moveUpO;
void moveDownO; }
Как мы видим, описание интерфейса гораздо проще, чем объявление класса.