Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Навигация
Лекция 1. Что такое Java? История
создания
Лекция
2. Основы объектно-ориентированного программирования
Лекция 7. Преобразование типов
Лекция 8. Объектная модель в Java
Лекция
10. Операторы и структура кода. Исключения
Реклама :
Модификатор abstract для интерфейса не требуется, поскольку все интерфейсы являются абстрактными. Его можно указать, но делать этого не рекомендуется, чтобы не загромождать код.
Далее записывается ключевое слово interface и имя интерфейса.
После этого может следовать ключевое слово extends и список интерфейсов, от которых будет наследоваться объявляемый интерфейс. Родительских типов может быть много, главное, чтобы не было повторений и чтобы отношение наследования не образовывало циклической зависимости.
Наследование интерфейсов действительно очень гибкое. Так, если есть два интерфейса, А и В, причем В наследуется от А, то новый интерфейс С может наследоваться от них обоих. Впрочем, понятно, что указание наследования от А является избыточным, все элементы этого интерфейса и так будут получены по наследству через интерфейс В.
Затем в фигурных скобках записывается тело интерфейса.
public interface Drawble extends Colorable, Resizable { }
Тело интерфейса состоит из объявления элементов, то есть полей-констант и абстрактных методов.
Все поля интерфейса должны быть public final static, так что эти модификаторы указывать необязательно и даже нежелательно, чтобы не загромождать код. Поскольку поля объявляются финальными, необходимо их сразу инициализировать.
public interface Directions { int RIGTH=1 ; int LETFT=2; int UP=3; int DOWN=4;
}
Все методы интерфейса являются public abstract и эти модификаторы также необязательны.
public interface Moveable { void moveRightO; void moveLeft(); void moveUp(); void moveDown();
}
Как мы видим, описание интерфейса гораздо проще, чем объявление класса.
Реализация интерфейса
Каждый класс может реализовывать любые доступные интерфейсы. Цри этом в классе должны быть реализованы все абстрактные методы, появившиеся при наследовании от интерфейсов или родительского класса, чтобы новый класс мог быть объявлен неабстрактным.
Если из разных источников наследуются методы с одинаковой сигнатурой, то достаточно один раз описать реализацию и она будет применяться для всех этих методов. Однако если у них различное возвращаемое значение, то возникает конфликт:
interface А { int getValue();
}
interface В {
double getValue();
}
Если попытаться объявить класс, реализующий оба эти интерфейса, то возникнет ошибка компиляции

