class A. 01 sField string. Method doStuff. ... end method. class nestedClass. ... end class. end class.
コアのサンプルも参照してください。このサンプルは、[スタート > すべてのプログラム > Micro Focus Enterprise Developer > Samples] の COBOL for JVM の下にあります。
抽象クラスは、インスタンス化できないクラスですが、継承のみは可能です。このため、抽象クラスは、通常基本クラスとして使用されます。抽象クラスのメンバーは、抽象クラスでのみ宣言され、実装はできません。抽象クラスは継承される必要があるため、抽象クラスの宣言時に FINAL 変更子は使用できません。
抽象クラスには、通常抽象メソッドが含まれます。このメソッドは、インターフェイスのメソッド宣言と同様に、クラス宣言では実装できません。抽象クラスはインスタンス化できないため、抽象クラスを継承するサブクラスでは、抽象クラスで定義される抽象メソッドの実装を提供する必要があります。抽象メソッドを含めることができるのは、抽象クラスのみです。
抽象クラスは、クラスからオブジェクトを作成しない場合に役立ちます。サブクラスを使用して実装を完了する際に、クラスを抽象として宣言します。
非抽象クラスがインターフェイスを介して抽象クラスから派生する場合、継承されたクラスは、抽象クラスのすべての抽象メンバーを実装する必要があります。次の例に示すように、派生したクラスの非抽象メンバーに抽象クラスのメンバーを実装する場合、OVERRIDE を使用します。
class-id. Animal abstract. method-id MakeNoise abstract. *> 実装は許可されない end method. end class. class-id Dog inherits type Animal. *> Animal クラスの MakeNoise メソッドをオーバーライドする method-id MakeNoise override. display "Woof!" end method. end class.
この例では、抽象クラス Animal には、抽象メソッド MakeNoise が含まれます。非抽象クラス Dog は抽象クラス Animal から継承するため、OVERRIDE 変更子を使用して MakeNoise の実装を提供する必要があります。
抽象クラスには、抽象メソッドに加えて非抽象メソッドも含めることができます。
抽象クラスを継承するクラスは、継承されたクラスのメンバーの実装を提供しない場合、抽象クラスとしても宣言される必要があります。
最終クラスは継承できません。このため、最終クラスのメソッドはオーバーライドできません。
クラスを FINAL で宣言すると、クラスの破損防止に役立ちます。また、サブクラスが目的の動作をオーバーライドすることで目的のクラスの機能を変更してしまう危険を防ぎます。
ネストされたクラスは、次の構文を使用して、包含クラス内の静的フィールド、プロパティ、メソッドにアクセスできます。
self::memberName
ネストされたクラス定義のオプションの句 SHARING PARENT を使用すると、ネストされたクラスは、包含クラスのインスタンス フィールド、プロパティ、メソッドにアクセスできます。
class-id ContainingClass. ... class-id Nested1. ... end class. class-id Nested2 sharing parent. ... end class. end class.
SHARING PARENT 句を使用するネストされたクラスは、囲みクラスのインスタンス メソッド内からのみインスタンス化できます。これらのクラスは、そのインスタンス メンバーが private であっても、self:: 構文を使用して包含クラスからインスタンス メンバーにアクセスできます。
このようなネストされたクラスには、その包含クラスのインスタンスへの暗黙参照が含まれます。ネストされたクラスでは、この参照を使用して、囲みクラスのインタンス メンバーにアクセスします。つまり、外部で保持される内部クラスへのすべての参照のガベージが収集されるまで、包含クラス インスタンスのガベージは収集されません。
次に例を示します。
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 self::companyName end method. end class. end class.