Главная » Java » Единичное и множественное наследование Java

0

 

Новый производный класс может быть построен на основе только одного базового класса – подобную модель в программировании обозначают термином единичное наследование (single inheritance). Предполагается, что Производный класс наследует не только контракт базового класса, но и элементы его реализации. В некоторых объектно-ориентированных языках программирования поддерживается модель множественного наследования (multiple inheritance), в соответствии с которой производный класс способен единовременно наследовать характеристики нескольких базовых классов.

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

Подобная Структура используется во многих вполне "законных" ситуациях и в ней нет ничего предосудительного. Проблема возникает в процессе наследования реализации, когда объект класса W предусматривает сохранение некоторого состояния. Если класс W, например, содержит publiс-поле с именем goggin и в вашем распоряжении имеется ссылка zref на объект типа Z, на что в действительности может указывать переменная zref. goggin? Она способна ссылаться на копию goggin, Принадлежащую Х, либо на экземпляр goggin, относящийся к У, либо Х и У могут совместно использовать единственную копию goggin и Т.д. Распутывание подобных зависимостей – задача, в общем случае, нетривиальная; структура класса становится более сложной и возможности его использования затрудняются. Язык Java позволяет решить проблему радикальным образом, предлагая модель единичного наследования.

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

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии