MainframeMaster

COBOL Tutorial

COBOL INHERITS Clause - Quick Reference

Progress0 of 0 lessons

Overview

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.

Purpose and Usage

  • Code reuse - Inherit methods and properties from parent classes
  • Hierarchical organization - Create class hierarchies
  • Method overriding - Provide specialized behavior in child classes
  • Polymorphic behavior - Treat objects as parent class instances
  • Inheritance relationships - Model "is-a" relationships

Inheritance Hierarchy Concept

Parent Class: [Method1] [Method2] [Property1] [Property2]
Child Class: [Inherited Methods] [New Method3] [New Property3]
Grandchild: [Inherited Methods] [New Method4] [New Property4]
Inheritance creates a chain of functionality

Child classes inherit all public and protected members from their parent classes.

Syntax

The INHERITS clause follows specific syntax patterns for defining inheritance relationships in object-oriented COBOL.

Basic Syntax

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
* 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.

Inheritance Rules

RuleDescriptionExample
Single inheritanceA class can inherit from only one parentCLASS-ID CHILD INHERITS PARENT
Method inheritanceChild inherits all public and protected methodsChild can call parent methods directly
Method overridingChild can override parent methodsSame method name, different implementation
Data inheritanceChild inherits parent data membersAccess to parent WORKING-STORAGE
Constructor inheritanceChild can call parent constructorsINVOKE SUPER "NEW"

Method Overriding

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
* 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.

Common Use Cases

INHERITS is commonly used in specific scenarios where code reuse and hierarchical organization are needed.

Employee Hierarchy

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
* 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.

Shape Hierarchy

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
* 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.

Polymorphic Usage

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
* 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.

Best Practices and Tips

Following these best practices ensures effective use of the INHERITS clause for inheritance-based programming.

INHERITS Design Principles

  • Model "is-a" relationships - Use inheritance for true specialization
  • Keep hierarchies shallow - Avoid deep inheritance chains
  • Use method overriding - Provide specialized behavior in child classes
  • Consider composition - Use composition over inheritance when appropriate
  • Document relationships - Clearly document inheritance hierarchies
  • Use protected access - Make methods available to child classes

Common Pitfalls to Avoid

PitfallProblemSolution
Deep hierarchiesComplex and hard to maintainKeep inheritance chains shallow
Inappropriate inheritancePoor modeling of relationshipsUse inheritance only for "is-a" relationships
Tight couplingChild classes too dependent on parentUse composition for loose coupling
Method signature changesBreaking child class implementationsMaintain backward compatibility
No documentationConfusion about inheritance relationshipsDocument all inheritance hierarchies

Performance Considerations

  • Virtual method calls - Inheritance can add slight overhead
  • Memory layout - Consider memory footprint of inherited data
  • Method resolution - Virtual method table lookups
  • Constructor chaining - Parent constructor calls
  • Optimization opportunities - Some compilers optimize inheritance
  • Cache performance - Consider data locality in inheritance

When to Use INHERITS

Use CaseINHERITS SuitabilityReasoning
Code reuseExcellentNatural fit for sharing functionality
Hierarchical modelingExcellentPerfect for "is-a" relationships
Polymorphic behaviorGoodEnables polymorphic programming
Interface implementationPoorUse IMPLEMENTS instead
Simple compositionPoorUse composition instead

INHERITS Clause Quick Reference

UsageSyntaxExample
Basic inheritanceINHERITS parent-class-nameINHERITS EMPLOYEE
With interfacesINHERITS parent IMPLEMENTS interfaceINHERITS BASE IMPLEMENTS IINTERFACE
Method overrideSame method name, different implementationMETHOD-ID CALCULATE-BONUS
Parent method callINVOKE SUPER "method-name"INVOKE SUPER "CALCULATE-BONUS"
Polymorphic usageTreat child as parent typeOBJECT REFERENCE PARENT-TYPE

Test Your Knowledge

1. What is the primary purpose of the INHERITS clause in COBOL?

  • To define class interfaces
  • To specify class inheritance from a parent class
  • To create new objects
  • To define data structures

2. What happens when a class inherits from another class?

  • The child class loses all its own methods
  • The child class acquires all public and protected members of the parent
  • The parent class is deleted
  • The child class becomes identical to the parent

3. What is method overriding in inheritance?

  • Deleting methods from the parent class
  • Providing a new implementation of a parent method in the child class
  • Copying methods from other classes
  • Creating new methods with different names

4. Which of the following is a benefit of using inheritance?

  • Reduced memory usage
  • Code reuse and hierarchical organization
  • Faster execution speed
  • Simpler syntax

5. Can a class inherit from multiple parent classes?

  • Yes, COBOL supports multiple inheritance
  • No, COBOL supports single inheritance only
  • Yes, but only for interfaces
  • Yes, but only for abstract classes

Frequently Asked Questions