Skip to content

Комбинирование наследования и интерфейсов

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

bsl
Функция ВернутьЗначение(Параметр) Экспорт
КонецФункции
bsl
Перем КакоеТоПоле Экспорт;

// Класс объявляет, что он реализует интерфейс,
// однако его текст не содержит этой реализации.
&Реализует("МойИнтерфейс")
Процедура ПриСозданииОбъекта()
    КакоеТоПоле = 42;
КонецПроцедуры
bsl
&Родитель
Перем СсылкаНаРодителя;

Функция ВернутьЗначение(Параметр) Экспорт
    Возврат Параметр + СсылкаНаРодителя.КакоеТоПоле;
КонецФункции

&Расширяет("АбстрактныйМойКласс")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
bsl
#Использовать extends

Наследник = Новый Наследник;
Родитель = Новый АбстрактныйМойКласс;

Построитель = Новый ПостроительНаследника(Наследник, Родитель);
ОбъектНаследник = Построитель.Построить();

// Исключение об отсутствующей реализации интерфейса, требуемой классом-родителем,
// не будет вызвано, так как реализация интерфейса находится в наследнике.
Сообщить(ОбъектНаследник.ВернутьЗначение(7)); // 49