Программирование на 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. Введение в сетевые протоколы

В классе оказывается два разных ме­тода с одинаковой сигнатурой, что является неразрешимым конфликтом. Это единственное ограничение на набор интерфейсов, которые может ре­ализовывать класс.

Подобный конфликт с полями-константами не столь критичен:

interface А { int value=3;

}

interface В {

double value=5.4;

}

class С implements A, В {

public static void main(String s[]) { Cc = new C();

// System.out.println(c.value); - ошибка! System.out.println(((A)c).value); System.out.println(((B)c).value);

}

}

Как видно из примера, обращаться к такому полю через сам класс Нельзя, компилятор не сможет понять, какое из двух полей нужно ис­

пользовать. Но можно с помощью явного приведения сослаться на одн0 из них.

Итак, если имя интерфейса указано после implements в объявлении класса, то класс реализует этот интерфейс. Наследники данного кл также реализуют интерфейс, поскольку им достаются по наследству его элементы.

Если интерфейс А наследуется от интерфейса В, а класс реализует А, то считается, что интерфейс В также реализуется этим классом по той же причине — все элементы передаются по наследству в два этапа — сначала интерфейсу А, затем классу.

Наконец, если класс С1 наследуется от класса С2, класс С2 реализует интерфейс А1, а интерфейс А1 наследуется от интерфейса А2, то класс С1 также реализует интерфейс А2.

Все это позволяет утверждать, что переменные типа интерфейс так­же допустимы. Они могут иметь значение null, или ссылаться на объекты, порожденные от классов, реализующих этот интерфейс. Поскольку объ­екты порождаются только от классов, а все они наследуются от Object, это означает, что значения типа интерфейс обладают всеми элементами класса Object.

Применение интерфейсов

До сих пор интерфейсы рассматривались с технической точки зрения — как их объявлять, какие конфликты могут возникать, как их разрешать. Однако важно понимать, как применяются интерфейсы с концептуальной точки зрения.

Распространенное мнение, что интерфейс — это полностью абстракт­ный класс, в целом верно, но оно не отражает всех преимуществ, которые дают интерфейсы объектной модели. Как уже отмечалось, множествен­ное наследование порождает ряд конфликтов, но отказ от него, хоть и де­лает язык проще, но не устраняет ситуации, в которых требуются подобные подходы.

Возьмем в качестве примера дерева наследования классификацию живых организмов