The INHERITS clause is used in object-oriented COBOL to specify that a class inherits from a parent class. This clause enables code reuse and establishes an inheritance hierarchy where child classes can access and extend the functionality of their parent classes.
Child classes inherit all public and protected members from their parent classes.
The INHERITS clause follows specific syntax patterns for defining inheritance relationships in object-oriented COBOL.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105* Basic INHERITS clause syntax CLASS-ID child-class-name INHERITS parent-class-name [IMPLEMENTS interface-name-1, interface-name-2, ...] [FACTORY] [OBJECT] [ENVIRONMENT DIVISION] [DATA DIVISION] [PROCEDURE DIVISION] END CLASS child-class-name. * Examples CLASS-ID MANAGER INHERITS EMPLOYEE FACTORY. CLASS-ID SENIOR-MANAGER INHERITS MANAGER IMPLEMENTS ILEADERSHIP-INTERFACE FACTORY. * Complete example CLASS-ID EMPLOYEE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 EMPLOYEE-ID PIC X(10). 01 EMPLOYEE-NAME PIC X(50). 01 EMPLOYEE-SALARY PIC 9(8)V99. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-EMPLOYEE-DATA. DATA DIVISION. LINKAGE SECTION. 01 ID PIC X(10). 01 NAME PIC X(50). 01 SALARY PIC 9(8)V99. PROCEDURE DIVISION USING ID, NAME, SALARY. MOVE ID TO EMPLOYEE-ID MOVE NAME TO EMPLOYEE-NAME MOVE SALARY TO EMPLOYEE-SALARY EXIT METHOD. END METHOD SET-EMPLOYEE-DATA. METHOD-ID GET-EMPLOYEE-INFO. DATA DIVISION. LINKAGE SECTION. 01 INFO PIC X(100). PROCEDURE DIVISION RETURNING INFO. STRING EMPLOYEE-ID DELIMITED BY SPACE ' - ' DELIMITED BY SIZE EMPLOYEE-NAME DELIMITED BY SPACE ' - $' DELIMITED BY SIZE EMPLOYEE-SALARY DELIMITED BY SIZE INTO INFO EXIT METHOD. END METHOD GET-EMPLOYEE-INFO. END CLASS EMPLOYEE. CLASS-ID MANAGER INHERITS EMPLOYEE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 DEPARTMENT PIC X(30). 01 TEAM-SIZE PIC 9(3). OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-MANAGER-DATA. DATA DIVISION. LINKAGE SECTION. 01 DEPT PIC X(30). 01 TEAM-COUNT PIC 9(3). PROCEDURE DIVISION USING DEPT, TEAM-COUNT. MOVE DEPT TO DEPARTMENT MOVE TEAM-COUNT TO TEAM-SIZE EXIT METHOD. END METHOD SET-MANAGER-DATA. METHOD-ID GET-MANAGER-INFO. DATA DIVISION. LINKAGE SECTION. 01 MANAGER-INFO PIC X(150). 01 EMPLOYEE-INFO PIC X(100). PROCEDURE DIVISION RETURNING MANAGER-INFO. INVOKE SELF "GET-EMPLOYEE-INFO" RETURNING EMPLOYEE-INFO STRING EMPLOYEE-INFO DELIMITED BY SIZE ' - Dept: ' DELIMITED BY SIZE DEPARTMENT DELIMITED BY SPACE ' - Team: ' DELIMITED BY SIZE TEAM-SIZE DELIMITED BY SIZE INTO MANAGER-INFO EXIT METHOD. END METHOD GET-MANAGER-INFO. END CLASS MANAGER.
INHERITS establishes parent-child relationships between classes.
Rule | Description | Example |
---|---|---|
Single inheritance | A class can inherit from only one parent | CLASS-ID CHILD INHERITS PARENT |
Method inheritance | Child inherits all public and protected methods | Child can call parent methods directly |
Method overriding | Child can override parent methods | Same method name, different implementation |
Data inheritance | Child inherits parent data members | Access to parent WORKING-STORAGE |
Constructor inheritance | Child can call parent constructors | INVOKE SUPER "NEW" |
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869* Method overriding example CLASS-ID ANIMAL FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 ANIMAL-NAME PIC X(30). OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-NAME. DATA DIVISION. LINKAGE SECTION. 01 NAME PIC X(30). PROCEDURE DIVISION USING NAME. MOVE NAME TO ANIMAL-NAME EXIT METHOD. END METHOD SET-NAME. METHOD-ID MAKE-SOUND. DATA DIVISION. LINKAGE SECTION. 01 SOUND PIC X(50). PROCEDURE DIVISION RETURNING SOUND. MOVE 'Some animal sound' TO SOUND EXIT METHOD. END METHOD MAKE-SOUND. END CLASS ANIMAL. CLASS-ID DOG INHERITS ANIMAL FACTORY. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID MAKE-SOUND. DATA DIVISION. LINKAGE SECTION. 01 SOUND PIC X(50). PROCEDURE DIVISION RETURNING SOUND. MOVE 'Woof! Woof!' TO SOUND EXIT METHOD. END METHOD MAKE-SOUND. END CLASS DOG. CLASS-ID CAT INHERITS ANIMAL FACTORY. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID MAKE-SOUND. DATA DIVISION. LINKAGE SECTION. 01 SOUND PIC X(50). PROCEDURE DIVISION RETURNING SOUND. MOVE 'Meow! Meow!' TO SOUND EXIT METHOD. END METHOD MAKE-SOUND. END CLASS CAT.
Method overriding allows child classes to provide specialized behavior.
INHERITS is commonly used in specific scenarios where code reuse and hierarchical organization are needed.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111* Employee inheritance hierarchy CLASS-ID EMPLOYEE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 EMP-ID PIC X(10). 01 EMP-NAME PIC X(50). 01 EMP-SALARY PIC 9(8)V99. 01 EMP-DEPARTMENT PIC X(30). OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-EMPLOYEE-DATA. DATA DIVISION. LINKAGE SECTION. 01 ID PIC X(10). 01 NAME PIC X(50). 01 SALARY PIC 9(8)V99. 01 DEPT PIC X(30). PROCEDURE DIVISION USING ID, NAME, SALARY, DEPT. MOVE ID TO EMP-ID MOVE NAME TO EMP-NAME MOVE SALARY TO EMP-SALARY MOVE DEPT TO EMP-DEPARTMENT EXIT METHOD. END METHOD SET-EMPLOYEE-DATA. METHOD-ID CALCULATE-BONUS. DATA DIVISION. LINKAGE SECTION. 01 BONUS PIC 9(8)V99. PROCEDURE DIVISION RETURNING BONUS. COMPUTE BONUS = EMP-SALARY * 0.1 EXIT METHOD. END METHOD CALCULATE-BONUS. END CLASS EMPLOYEE. CLASS-ID MANAGER INHERITS EMPLOYEE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 TEAM-SIZE PIC 9(3). 01 MANAGEMENT-LEVEL PIC X(20). OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-MANAGER-DATA. DATA DIVISION. LINKAGE SECTION. 01 TEAM-COUNT PIC 9(3). 01 LEVEL PIC X(20). PROCEDURE DIVISION USING TEAM-COUNT, LEVEL. MOVE TEAM-COUNT TO TEAM-SIZE MOVE LEVEL TO MANAGEMENT-LEVEL EXIT METHOD. END METHOD SET-MANAGER-DATA. METHOD-ID CALCULATE-BONUS. DATA DIVISION. LINKAGE SECTION. 01 BONUS PIC 9(8)V99. 01 BASE-BONUS PIC 9(8)V99. PROCEDURE DIVISION RETURNING BONUS. INVOKE SUPER "CALCULATE-BONUS" RETURNING BASE-BONUS COMPUTE BONUS = BASE-BONUS + (TEAM-SIZE * 100) EXIT METHOD. END METHOD CALCULATE-BONUS. END CLASS MANAGER. CLASS-ID EXECUTIVE INHERITS MANAGER FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 STOCK-OPTIONS PIC 9(8)V99. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-EXECUTIVE-DATA. DATA DIVISION. LINKAGE SECTION. 01 OPTIONS PIC 9(8)V99. PROCEDURE DIVISION USING OPTIONS. MOVE OPTIONS TO STOCK-OPTIONS EXIT METHOD. END METHOD SET-EXECUTIVE-DATA. METHOD-ID CALCULATE-BONUS. DATA DIVISION. LINKAGE SECTION. 01 BONUS PIC 9(8)V99. 01 MANAGER-BONUS PIC 9(8)V99. PROCEDURE DIVISION RETURNING BONUS. INVOKE SUPER "CALCULATE-BONUS" RETURNING MANAGER-BONUS COMPUTE BONUS = MANAGER-BONUS + STOCK-OPTIONS EXIT METHOD. END METHOD CALCULATE-BONUS. END CLASS EXECUTIVE.
Inheritance creates natural hierarchies for business entities.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131* Geometric shape inheritance hierarchy CLASS-ID SHAPE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 SHAPE-NAME PIC X(20). 01 SHAPE-COLOR PIC X(15). OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-SHAPE-PROPERTIES. DATA DIVISION. LINKAGE SECTION. 01 NAME PIC X(20). 01 COLOR PIC X(15). PROCEDURE DIVISION USING NAME, COLOR. MOVE NAME TO SHAPE-NAME MOVE COLOR TO SHAPE-COLOR EXIT METHOD. END METHOD SET-SHAPE-PROPERTIES. METHOD-ID CALCULATE-AREA. DATA DIVISION. LINKAGE SECTION. 01 AREA PIC 9(8)V99. PROCEDURE DIVISION RETURNING AREA. MOVE 0 TO AREA EXIT METHOD. END METHOD CALCULATE-AREA. METHOD-ID DISPLAY-SHAPE. DATA DIVISION. LINKAGE SECTION. 01 INFO PIC X(100). PROCEDURE DIVISION RETURNING INFO. STRING SHAPE-NAME DELIMITED BY SPACE ' - Color: ' DELIMITED BY SIZE SHAPE-COLOR DELIMITED BY SPACE INTO INFO EXIT METHOD. END METHOD DISPLAY-SHAPE. END CLASS SHAPE. CLASS-ID RECTANGLE INHERITS SHAPE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 LENGTH PIC 9(5)V99. 01 WIDTH PIC 9(5)V99. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-RECTANGLE-DIMENSIONS. DATA DIVISION. LINKAGE SECTION. 01 LEN PIC 9(5)V99. 01 WID PIC 9(5)V99. PROCEDURE DIVISION USING LEN, WID. MOVE LEN TO LENGTH MOVE WID TO WIDTH EXIT METHOD. END METHOD SET-RECTANGLE-DIMENSIONS. METHOD-ID CALCULATE-AREA. DATA DIVISION. LINKAGE SECTION. 01 AREA PIC 9(8)V99. PROCEDURE DIVISION RETURNING AREA. COMPUTE AREA = LENGTH * WIDTH EXIT METHOD. END METHOD CALCULATE-AREA. METHOD-ID DISPLAY-SHAPE. DATA DIVISION. LINKAGE SECTION. 01 INFO PIC X(100). 01 BASE-INFO PIC X(100). 01 AREA-STR PIC X(20). 01 AREA-VAL PIC 9(8)V99. PROCEDURE DIVISION RETURNING INFO. INVOKE SUPER "DISPLAY-SHAPE" RETURNING BASE-INFO INVOKE SELF "CALCULATE-AREA" RETURNING AREA-VAL MOVE AREA-VAL TO AREA-STR STRING BASE-INFO DELIMITED BY SIZE ' - Area: ' DELIMITED BY SIZE AREA-STR DELIMITED BY SIZE INTO INFO EXIT METHOD. END METHOD DISPLAY-SHAPE. END CLASS RECTANGLE. CLASS-ID CIRCLE INHERITS SHAPE FACTORY. DATA DIVISION. WORKING-STORAGE SECTION. 01 RADIUS PIC 9(5)V99. OBJECT SECTION. PROCEDURE DIVISION. METHOD-ID SET-CIRCLE-RADIUS. DATA DIVISION. LINKAGE SECTION. 01 RAD PIC 9(5)V99. PROCEDURE DIVISION USING RAD. MOVE RAD TO RADIUS EXIT METHOD. END METHOD SET-CIRCLE-RADIUS. METHOD-ID CALCULATE-AREA. DATA DIVISION. LINKAGE SECTION. 01 AREA PIC 9(8)V99. PROCEDURE DIVISION RETURNING AREA. COMPUTE AREA = 3.14159 * RADIUS * RADIUS EXIT METHOD. END METHOD CALCULATE-AREA. END CLASS CIRCLE.
Inheritance enables polymorphic behavior with specialized implementations.
12345678910111213141516171819202122232425262728293031323334353637383940* Polymorphic behavior with inheritance IDENTIFICATION DIVISION. PROGRAM-ID INHERITANCE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 SHAPE-OBJECT OBJECT REFERENCE SHAPE. 01 RECTANGLE-OBJECT OBJECT REFERENCE RECTANGLE. 01 CIRCLE-OBJECT OBJECT REFERENCE CIRCLE. 01 SHAPE-INFO PIC X(100). 01 SHAPE-AREA PIC 9(8)V99. PROCEDURE DIVISION. * Create shape objects INVOKE RECTANGLE "NEW" RETURNING RECTANGLE-OBJECT INVOKE RECTANGLE-OBJECT "SET-SHAPE-PROPERTIES" USING 'Rectangle', 'Red' INVOKE RECTANGLE-OBJECT "SET-RECTANGLE-DIMENSIONS" USING 10.5, 5.2 INVOKE CIRCLE "NEW" RETURNING CIRCLE-OBJECT INVOKE CIRCLE-OBJECT "SET-SHAPE-PROPERTIES" USING 'Circle', 'Blue' INVOKE CIRCLE-OBJECT "SET-CIRCLE-RADIUS" USING 7.0 * Polymorphic behavior - treat as parent class SET SHAPE-OBJECT TO RECTANGLE-OBJECT INVOKE SHAPE-OBJECT "DISPLAY-SHAPE" RETURNING SHAPE-INFO DISPLAY 'Rectangle Info: ' SHAPE-INFO INVOKE SHAPE-OBJECT "CALCULATE-AREA" RETURNING SHAPE-AREA DISPLAY 'Rectangle Area: ' SHAPE-AREA SET SHAPE-OBJECT TO CIRCLE-OBJECT INVOKE SHAPE-OBJECT "DISPLAY-SHAPE" RETURNING SHAPE-INFO DISPLAY 'Circle Info: ' SHAPE-INFO INVOKE SHAPE-OBJECT "CALCULATE-AREA" RETURNING SHAPE-AREA DISPLAY 'Circle Area: ' SHAPE-AREA STOP RUN. END PROGRAM INHERITANCE-DEMO.
Polymorphic behavior allows treating child objects as parent instances.
Following these best practices ensures effective use of the INHERITS clause for inheritance-based programming.
Pitfall | Problem | Solution |
---|---|---|
Deep hierarchies | Complex and hard to maintain | Keep inheritance chains shallow |
Inappropriate inheritance | Poor modeling of relationships | Use inheritance only for "is-a" relationships |
Tight coupling | Child classes too dependent on parent | Use composition for loose coupling |
Method signature changes | Breaking child class implementations | Maintain backward compatibility |
No documentation | Confusion about inheritance relationships | Document all inheritance hierarchies |
Use Case | INHERITS Suitability | Reasoning |
---|---|---|
Code reuse | Excellent | Natural fit for sharing functionality |
Hierarchical modeling | Excellent | Perfect for "is-a" relationships |
Polymorphic behavior | Good | Enables polymorphic programming |
Interface implementation | Poor | Use IMPLEMENTS instead |
Simple composition | Poor | Use composition instead |
Usage | Syntax | Example |
---|---|---|
Basic inheritance | INHERITS parent-class-name | INHERITS EMPLOYEE |
With interfaces | INHERITS parent IMPLEMENTS interface | INHERITS BASE IMPLEMENTS IINTERFACE |
Method override | Same method name, different implementation | METHOD-ID CALCULATE-BONUS |
Parent method call | INVOKE SUPER "method-name" | INVOKE SUPER "CALCULATE-BONUS" |
Polymorphic usage | Treat child as parent type | OBJECT REFERENCE PARENT-TYPE |
1. What is the primary purpose of the INHERITS clause in COBOL?
2. What happens when a class inherits from another class?
3. What is method overriding in inheritance?
4. Which of the following is a benefit of using inheritance?
5. Can a class inherit from multiple parent classes?