Вызов конструкторов и методов объекта

Вызовы конструкторов осуществляются так же как и вызовы функций. Как и все функции, конструктор вызывается как часть выражения, как показано в примерах 12-4 и 12-5.

Пример 12-5 Вставка рядов в объектную таблицу
DECLARE emp employee_typ; BEGIN INSERT INTO employee_tab VALUES (employee_typ(310, 'Evers', 'Boston', 'EBOSTON', '555.111.2222', '01-AUG-04', 'SA_REP', 9000,.15, 101, 110, address_typ('123 Main', 'San Francisco', 'CA', '94111')) ); INSERT INTO employee_tab VALUES (employee_typ(320, 'Martha', 'Dunn', 'MDUNN', '555.111.3333', '30-SEP-04', 'AC_MGR', 12500, 0, 101, 110, address_typ('123 Broadway', 'Redwood City', 'CA', '94065')) ); END; /

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

Подобно подпрограммам пакеджей, методы вызываются используя "точечную" нотацию. В примере 12-6, метод display_address вызывается, чтобы показать атрибуты объекта. Обратите внимание на использование функции VALUE, которая возвращает значение объекта. VALUE принимает аргумент для корреляции переменных. В этом контексте корреляция переменных это переменная ряда или псевдоним таблицы с рядом объектной таблицы.

Пример 12-6 Доступ к методам объекта
DECLARE emp employee_typ; BEGIN SELECT VALUE(e) INTO emp FROM employee_tab e WHERE e.employee_id = 310; emp.display_address(); END; /

Для статических методов, используйте вызов типа type_name.method_name вместо вызова, специфического для экземпляра типа.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: