Skip to content

Наследование

Для создания наследника от родителя используется класс ПостроительНаследника. Для создания наследника необходимо создать экземпляр класса ПостроительНаследника, передав ему объекты родителя и наследника; и вызвать метод Построить для получения объекта с общим интерфейсом.

Предположим, у нас есть класс Родитель со следующим описанием:

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

Для объявления, что класс наследника должен унаследовать поведение класса Родитель, используется аннотация &Расширяет:

bsl
Функция ФункцияНаследника() Экспорт
    Возврат 0;
КонецФункции

&Расширяет("Родитель")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Для построения объекта, наследующего поведение класса Родитель, используется класс ПостроительНаследника:

bsl
#Использовать extends

Наследник = Новый Наследник;
Родитель = Новый Родитель;

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

Сообщить(ОбъектНаследник.ФункцияНаследника()); // 0
Сообщить(ОбъектНаследник.ВернутьЗначение(42)); // 42

Полученный объект ОбъектНаследник будет обладать методами ФункцияНаследника из класса Наследник и ВернутьЗначение из класса Родитель.

Переопределение методов

При необходимости класс-наследник может переопределить методы родителя.

bsl
Функция ВернутьЗначение(Значение) Экспорт
    Возврат 7;
КонецФункции

&Расширяет("Родитель")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Созданный ОбъектНаследник будет возвращать 7 вместо переданного значения.

Доступ к родителю

При генерации объекта-наследника в него добавляется поле _ОбъектРодитель, в котором хранится ссылка на объект-родитель, который был передан в ПостроительНаследника. Чтобы не запоминать волшебное название поля, в классе-наследнике можно объявить поле с аннотацией &Родитель.

Ссылку можно использовать для вызова методов родителя, в том числе тех, которые переопределяются в классе-наследнике.

bsl
&Родитель
Поле СсылкаНаРодителя;

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

&Расширяет("Родитель")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

При вызове метода ВернутьЗначение объекта-наследника будет вызван метод родителя, который вернет переданное значение, и к нему будет прибавлено 7.