JVM COBOL では、各クラスがそれぞれ他の 1 つのクラスを継承します。継承元のクラスが (INHERITS 句で) 指定されていない場合は、System.Object (.NET) または java.lang.Object (JVM) を継承します。
![]() |
![]() |
class-id A. 01 sField string. method-id doStuff. ... end method. class-id nestedClass. ... end class. end class.
コアのサンプルも参照してください。このサンプルは、[スタート > すべてのプログラム > Micro Focus Visual COBOL > Samples]、 の場合JVM COBOL 言語リファレンスの場合 (Windows) または $COBDIR/demo (UNIX)。 に用意されています。
抽象クラス自体はインスタンス化できませんが、非抽象クラスで継承することによってインスタンス化できます。ABSTRACT クラスは継承する必要があるため、FINAL にすることはできません。
抽象クラスには、通常抽象メソッドが含まれます。このメソッドは、インターフェイスのメソッド宣言と同様に、クラス宣言では実装されません。ただし、抽象クラスで非抽象メソッドを定義することもできます。抽象クラスを継承するクラスでは、自身も抽象クラスでない限り、その抽象クラスで定義されているすべての抽象メソッドの実装を提供する必要があります。抽象メソッドを含めることができるのは、抽象クラスのみです。
次の例に示すように、派生したクラスの非抽象メンバーに抽象クラスのメンバーを実装する場合は OVERRIDE を使用します。
class-id. Animal abstract. method-id MakeNoise abstract. *> No implementation allowed end method. end class. class-id Dog inherits type Animal. *> Overrides the MakeNoise method in the Animal class method-id MakeNoise override. display "Woof!" end method. end class.
この例では、抽象クラス Animal には、抽象メソッド MakeNoise が含まれます。非抽象クラス Dog は抽象クラス Animal から継承するため、OVERRIDE 修飾子を使用して MakeNoise の実装を提供する必要があります。
抽象クラスには、抽象メソッドに加えて非抽象メソッドも含めることができます。
抽象クラスを継承するクラスが、継承されたクラスのメンバーの実装を提供しない場合、そのクラスも抽象クラスとして宣言する必要があります。
最終クラスは継承できません。このため、最終クラスのメソッドはオーバーライドできません。
クラスを FINAL で宣言すると、クラスの破損防止に役立ちます。また、サブクラスが目的の動作をオーバーライドすることで目的のクラスの機能を変更してしまう危険を防ぎます。
ネストされたクラスは、包含クラス内の静的フィールド、プロパティ、およびメソッドにアクセスできます。
ネストされたクラス定義でオプションの SHARING PARENT 指定を使用すると、ネストされたクラスのインスタンス メソッドおよびプロパティは、包含クラスのインスタンス フィールド、プロパティ、およびメソッドにアクセスできます。
class-id ContainingClass.... class-id Nested1.... end class. class-id Nested2 sharing parent.... end class. end class.
SHARING PARENT 指定を持つネストされたクラスは、囲みクラスのインスタンス メソッド内からのみインスタンス化できます。これらのクラスは、そのインスタンス メンバーが private であっても、包含クラスからインスタンス メンバーにアクセスできます。
このようなネストされたクラスには、その包含クラスのインスタンスへの暗黙参照が含まれます。ネストされたクラスは、この参照を使用して囲みクラスのインタンス メンバーにアクセスします。つまり、外部で保持される内部クラスへのすべての参照のガベージが収集されるまで、包含クラス インスタンスのガベージは収集されません。
次に例を示します。
class-id ContainingClass.01 companyName string value "Micro Focus". method-id instance1.01 o type Nested2. set o to new Nested2 ... end method class-id Nested2 SHARING PARENT. method-id method2 display companyName end method. end class. end class.
SHARING PARENT 指定なしで定義されるネストされたクラスは、public、private または internal として宣言できます。指定された可視性に応じて、これらのクラスは、包含クラスやインスタンス メソッドからのみではなく、あらゆるコンテキストからインスタンス化できます。これらのクラスは、明示的なオブジェクト参照を使用することでのみ、包含クラスのインスタンス メンバーにアクセスできます。