Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


インスタンス・メソッドのオーバーライド

サブクラスで定義されたインスタンス・メソッドは、そのサブクラスで利用できるのであれば (これら 2 つのメソッドが同じシグニチャーを持っている場合)、継承されたインスタンス・メソッドをオーバーライドすると言います。

スーパークラス・インスタンス・メソッド m1 を COBOL サブクラスでオーバーライドするには、スーパークラス・メソッドと名前が同じで、その PROCEDURE DIVISION USING 句 (ある場合) の 仮パラメーターの数およびタイプがスーパークラス・メソッドと同じである サブクラスでインスタンス・メソッド m1 を定義します。(スーパークラス・メソッドが Java でインプリメントされる場合には、対応する Java パラメーターのデータ型と相互運用可能な仮パラメーターをコーディングする 必要があります。) クライアントがサブクラスのインスタンスで m1 を呼び出すとき、スーパークラス・メソッドではなく、サブクラス・メソッドが呼び出されます。

例えば、Account クラスは、その LINKAGE SECTION および PROCEDURE DIVISION ヘッダーが 以下のような、メソッド debit を定義します。

Linkage section.
01 inDebit    pic S9(9) binary.
Procedure Division using by value inDebit.

CheckingAccount サブクラスを定義し、Account スーパークラスで定義された debit メソッドをオーバーライドする debit メソッドをそれに 持たす場合には、pic S9(9) binary として指定された入力パラメーターを必ず 1 つ持つサブクラス・メソッドを定義します。クライアントが、CheckingAccount インスタンスへの オブジェクト参照を使用して、debit を呼び出すと、CheckingAccount debit メソッド (Account スーパークラス内の debit メソッドではなく) が呼び出されます。

メソッド戻り値の有無および PROCEDURE DIVISION RETURNING 句 (ある場合) で使われる戻り値のデータ型は、サブクラス・インスタンス・メソッドとオーバーライドした スーパークラス・インスタンス・メソッドにおいて同一でなければなりません。

インスタンス・メソッドは、COBOL スーパークラスのファクトリー・メソッドを オーバーライドしてはならないし、Java スーパークラスの静的メソッドをオーバーライドすることもできません。

例: メソッドの定義


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)