Базы данных Oracle - статьи



             

Вызов переопределенного метода в типе-потомке


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

Например: пусть у нас есть класс t_ParentType в котором определен метод getName:

------------------------------------------------------------ --спецификация объектного типа t_ParentType: - ------------------------------------------------------------ create or replace type t_ParentType as object ( v_Field1 varchar2(32), member function getName return varchar2 ) not final; ------------------------------------------------------------ --тело объектного типа t_ParentType: - ------------------------------------------------------------ create or replace type body t_ParentType as member function getName return varchar2 is begin return self.v_Field1; end; end;

Теперь мы определяем объектный тип t_ChildType, который является наследником t_ParentType. В типе t_ChildType метод getName является виртуальным и переопределен. Для этого использовано ключевое слово OVERRIDING: ------------------------------------------------------------ --Спецификация объектного типа t_ChildType, - --который является наследником : t_ParentType - --Внимание: метод getName переопределен - ------------------------------------------------------------ create or replace type t_ChildType under t_ParentType ( v_Field2 varchar2(64),

overriding member function getName return varchar2 ) not final;

В реализации метода getName попытаемся вызвать унаследованный метод getName (объектного типа t_ParentType)

------------------------------------------------------------ --Тело объектного типа t_ChildType, - --в методе getName необходимо вызвать унаследованный метод - ------------------------------------------------------------ create or replace type body t_ChildType is overriding member function getName return varchar2 is begin return (???) getName ' ' v_Field2; -- как вызвать -- метод предка ??? end; end;




Содержание  Назад  Вперед