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