A class extension enables you to add extra functionality to an object COBOL class without changing the original source code.
The difference between extending a class with a class extension as opposed to using inheritance is that the class extensions are inherited by all existing subclasses. For example, if class A has a subclass, class B (B INHERITS FROM A), you can add methods to class A by subclassing it to create subclass C. However, class B does not inherit the methods of class C, because it is a subclass of A. If you extend class A with a class extension, X, the effect at run time is the same as if you had changed and recompiled class A: class B inherits all the extra methods in class X.
General Format
Syntax Rules
- Extension-name-1 must not be the same as class-name-1.
- Extension-name-1 in the END CLASS header must be identical to the extension-name-1 specified in the preceding Class-ID paragraph.
- Class-name-1 must be the name of a class specified in the Class-Control paragraph.
- The Data Division of the class-body may contain an empty Object-Storage Section. The only other sections that may be specified in the Data Division of a Class Extension are the Working-Storage Section and the Linkage Section.
- Statements in the class extension may reference data declared in class-name-1 only when both the following cocnditions are true:
- The DATA IS PROTECTED or DATA IS RESTRICTED phrase is specified in the Class-ID paragraph of class-name-1
- The WITH DATA phrase is specified in the Class-ID paragraph of the class extension.
General Rules
- The EXTEND clause specifies a class extension. A class extension adds methods to an object class. The methods specified in extension-name-1 are inherited by all subclasses, existing and new, of class-name-1.
- During the execution of a run unit, a COBOL call statement to extension-name-1 must be executed before any of the methods in the class extension are invoked. This registers the methods in the class extension with the OO runtime system.