NETJVM 

マネージ COBOL のネストされたクラス

マネージ COBOL では、別のクラス内でネストされたクラスを定義できる。包含クラスに属するすべてのメソッドの後に記述する。

ネストされたクラスは、包含クラス内の静的フィールド、プロパティ、およびメソッドにアクセスできる。

ネストされたクラス定義でオプションの SHARING PARENT 指定を使用すると、ネストされたクラスのインスタンス メソッドおよびプロパティは、包含クラスのインスタンス フィールド、プロパティ、およびメソッドにアクセスできる。

    class-id ContainingClass. 
    ...
    class-id Nested1. 
        ... 
    end class.
    class-id Nested2 sharing parent. 
       ... 
    end class. 
    end class.

SHARING PARENT 指定を持つネストされたクラス

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 を使用しないネストされたクラス

SHARING PARENT 指定なしで定義されるネストされたクラスは、public、private または internal として宣言できる。指定された可視性に応じて、これらのクラスは、包含クラスやインスタンス メソッドからのみではなく、あらゆるコンテキストからインスタンス化できる。これらのクラスは、明示的なオブジェクト参照を使用することでのみ、包含クラスのインスタンス メンバーにアクセスできる。