Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
В классе оказывается два разных метода с одинаковой сигнатурой, что является неразрешимым конфликтом. Это единственное ограничение на набор интерфейсов, которые может реализовывать класс.
Подобный конфликт с полями-константами не столь критичен:
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.
Применение интерфейсов
До сих пор интерфейсы рассматривались с технической точки зрения — как их объявлять, какие конфликты могут возникать, как их разрешать. Однако важно понимать, как применяются интерфейсы с концептуальной точки зрения.
Распространенное мнение, что интерфейс — это полностью абстрактный класс, в целом верно, но оно не отражает всех преимуществ, которые дают интерфейсы объектной модели. Как уже отмечалось, множественное наследование порождает ряд конфликтов, но отказ от него, хоть и делает язык проще, но не устраняет ситуации, в которых требуются подобные подходы.
Возьмем в качестве примера дерева наследования классификацию живых организмов