Наследование
Для создания наследника от родителя используется класс ПостроительНаследника. Для создания наследника необходимо создать экземпляр класса ПостроительНаследника, передав ему объекты родителя и наследника; и вызвать метод Построить для получения объекта с общим интерфейсом.
Предположим, у нас есть класс Родитель со следующим описанием:
Функция ВернутьЗначение(Значение) Экспорт
Возврат Значение;
КонецФункцииДля объявления, что класс наследника должен унаследовать поведение класса Родитель, используется аннотация &Расширяет:
Функция ФункцияНаследника() Экспорт
Возврат 0;
КонецФункции
&Расширяет("Родитель")
Процедура ПриСозданииОбъекта()
КонецПроцедурыДля построения объекта, наследующего поведение класса Родитель, используется класс ПостроительНаследника:
#Использовать extends
Наследник = Новый Наследник;
Родитель = Новый Родитель;
Построитель = Новый ПостроительНаследника(Наследник, Родитель);
ОбъектНаследник = Построитель.Построить();
Сообщить(ОбъектНаследник.ФункцияНаследника()); // 0
Сообщить(ОбъектНаследник.ВернутьЗначение(42)); // 42Полученный объект ОбъектНаследник будет обладать методами ФункцияНаследника из класса Наследник и ВернутьЗначение из класса Родитель.
Переопределение методов
При необходимости класс-наследник может переопределить методы родителя.
Функция ВернутьЗначение(Значение) Экспорт
Возврат 7;
КонецФункции
&Расширяет("Родитель")
Процедура ПриСозданииОбъекта()
КонецПроцедурыСозданный ОбъектНаследник будет возвращать 7 вместо переданного значения.
Доступ к родителю
При генерации объекта-наследника в него добавляется поле _ОбъектРодитель, в котором хранится ссылка на объект-родитель, который был передан в ПостроительНаследника. Чтобы не запоминать волшебное название поля, в классе-наследнике можно объявить поле с аннотацией &Родитель.
Ссылку можно использовать для вызова методов родителя, в том числе тех, которые переопределяются в классе-наследнике.
&Родитель
Поле СсылкаНаРодителя;
Функция ВернутьЗначение(Значение) Экспорт
Возврат 7 + СсылкаНаРодителя.ВернутьЗначение(Значение);
КонецФункции
&Расширяет("Родитель")
Процедура ПриСозданииОбъекта()
КонецПроцедурыПри вызове метода ВернутьЗначение объекта-наследника будет вызван метод родителя, который вернет переданное значение, и к нему будет прибавлено 7.
