Chapter Contents |
Previous |
Next |
SUPER |
Category: | Object Oriented |
Syntax |
CALL SUPER(object-id,method-name<,parameters>); |
<return-value=>_SUPER<.method-name>(<parameters>); |
Type: Numeric or Object
Type: Character
Note: These parameters are update parameters. See
Input, Output, and Update Parameters for more information.
Type: Numeric, Character
Type: Numeric, Character, List, Object-name, Class, or Interface
Details |
SUPER provides a convenient way of calling a method in the parent class from a method in the child class. In particular, it is useful for calling the corresponding parent method from an overridden method in the child.
Although method-name is typically the name of the currently executing method, which is stored in the system variable _METHOD_, any other method name can be used.
The object identified by object-id must be the same object whose method is currently executing. The identifier for this object is stored in the system variable _SELF_.
For more information about system variables, see System Variables.
SUPER can also be used with CLASS blocks, USECLASS blocks and dot notation by using _SUPER. If you are specifying the same method in the parent and child classes, you do not need to specify the method name.
Examples |
In this example, _SUPER is used to call the parent method of an overridden method in class X.
Y.SCL class y; m: method; ...SCL statements... endmethod; endclass; X.SCL class x extends y; m: method; _super(); /* _super invokes method M in class Y */ endmethod; endclass;
To call a different method in the parent class, specify the method name after _SUPER using dot notation. The following example invokes the M2 method in class Y using _SUPER:
Y.SCL class y; m2: method; ...SCL statements... endmethod; endclass; X.SCL class x extends y; m: method; _super.m2(); endmethod; endclass;
This example demonstrates how you can use inheritance to invoke a method in the parent of a parent class.
S.SCL class s; m: method n: num return=num; dcl num x; x=n+199; return x; endmethod; endclass; S2.SCL class s2 extends s; m: method n: num return=num/(state='O'); dcl num x; x=n+_super(1); return x; endmethod; endclass; S3.SCL class s3 extends s2; n: method return=num; dcl num x; x=_super.m(-10); return x; endmethod; endclass; DRS.SCL init: dcl s3 sobj=_new_ s3(); dcl num x; dcl string s; x=sobj.n(); put x=; return;
This example results in the following output:
x=190
The calling sequence for the above example is as follows:
-10
.
1
.
1
is added to
199
and
returned to S2.
200
is added to
-10
and returned to S3.
190
is returned to
DRS.SCL.
See Also |
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.