Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Моди­фикатор 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();

}

Если попытаться объявить класс, реализующий оба эти интерфейса, то возникнет ошибка компиляции