クラスでサポートされる 2 つのメソッド (クラスで定義されているか、スーパークラスから継承されたかにかかわらず) は、それらが同じ名前を持っており、シグニチャーが異なる場合には、多重定義 されていると言います。
例えば、別々の一組のパラメーターを使用してデータを初期化するために、クライアントが別々の版のメソッドを呼び出せるようにするときは、メソッドを多重定義します。
メソッドを多重定義するには、その PROCEDURE DIVISION USING 句 (ある場合) の仮パラメーターの数や型が、同じクラスでサポートされる同一の名前のメソッドと異なるメソッドを定義します。例えば、Account クラスは、必ず 1 つの仮パラメーターを持つ インスタンス・メソッド init を定義します。init メソッドの LINKAGE SECTION および PROCEDURE DIVISION ヘッダーは、以下のようになります。
Linkage section. 01 inAccountNumber pic S9(9) binary. Procedure Division using by value inAccountNumber.
クライアントはこのメソッドを呼び出し、inAccountNumber のデータ型と一致する引数を必ず 1 つ渡して、指定の口座番号 (およびデフォルトの勘定残高ゼロ) で Account インスタンスを初期化します。
ただし、Account クラスでは、例えば、開始の勘定残高も指定できる別の仮パラメーターを持つ、2 番目のインスタンス・メソッド init を 定義することができます。この init メソッドの LINKAGE SECTION および PROCEDURE DIVISION ヘッダーは、以下のようになります。
Linkage section.
01 inAccountNumber pic S9(9) binary.
01 inBalance pic S9(9) binary.
Procedure Division using by value inAccountNumber
inBalance.
クライアントは、目的のメソッドのシグニチャーと一致する引数を渡して、いずれかの init メソッドを呼び出すことができます。
メソッド戻り値の有無は、多重定義したメソッドと共通している必要はありません。また、PROCEDURE DIVISION RETURNING 句 (ある場合) で指定する 戻り値のデータ型は、多重定義したメソッドと同一である必要はありません。
ファクトリー・メソッドの多重定義は、インスタンス・メソッドを多重定義する場合とまったく同じ方法で行うことができます。
多重定義メソッドの定義および多重定義メソッドの呼び出しの解決に関する規則は、対応する Java 規則に基づきます。
関連タスク
メソッドの呼び出し (INVOKE)
ファクトリー・メソッドの定義
関連参照
多重定義 (「Java 言語仕様」)