9.2.11. Calling Instance Methods
Let
T
be a user defined type that has an instance method
IM
. Let
IT
be a scalar expression having a compile time type of
T
.
IT.IM ( [ parameter, .... ] )
This will call the instance method
IM
of
T
and will return whatever the
IM
returns.
Similarly to member observers/mutators the compile time type of
IT
can be specified explicitly:
(IT as T).IM ( [ parameter, .... ] )
This syntax however has an additional property in that it will call the
method of the type regardless of whether it is overloaded in a subtype or
not. Let
ST
be a subtype of
T
and
ST
that has the method
IM
overloaded. Let
IST
be a scalar expression that represents an instance of
ST
.
Then:
(IST as T).IM ( [ parameter, ... ] )
will call the method
IM
as defined in
T
, whereas
IST.IM ( [ parameter, ... ] )
will call the method
IM
as defined in
ST
.
Example 9.10. Calling Overloaded Instance Methods
CREATE TYPE UDT_BASE
method A () returns integer;
CREATE TYPE UDT_SUB under UDT_BASE
OVERRIDING method A () returns integer;
create method A () returns integer for UDT_BASE
{
return 1;
}
create method A () returns integer for UDT_SUB
{
return 2;
}
select new UDT_SUB ().A() as IMPLICIT,
(new UDT_SUB() as UDT_BASE).A() as EXPLICIT;
This will return:
IMPLICIT EXPLICIT
----------------------------
2 1
This is done so the overloaded methods can call the base type methods.