適用可能な複数のメソッドからの選択

選択プロセスの一般的な目的は、特定の引数セットに対する最良一致(最も厳密に一致するもの)を得ることです。たとえば、クラス A がクラス B から派生し、クラス B 自体は System.Object から派生すると仮定します。次の例では、指定された引数がいずれのターゲット メソッドの引数とも完全に一致しない場合であっても、「最も厳密な」規則が適用される仕組みを示します。

Class X.
Static.
Method-id. Method1.
Procedure division using by value arg1 as object.   *> method (i)
End method method1.
Method-id. Method1.
Procedure division using by value arg1 as B.   *> method (ii)
End method method1.
End static.
End class X.
Class Y.
Static.
Method-id. Main.
01 obj1 object.
01 obj2 type “B”.
01 obj3 type “A”.
      Invoke type “X”::”Method1”(obj1)  *> Uses method (i)
      Invoke type “X”::”Method1”(obj2)  *> Uses method (ii)
      Invoke type “X”::”Method1”(obj3)  *> also uses method (ii) since type B is ‘closer’ 
                                                                 *> to type A than System.Object…
End method main.
End static.
End class Y.

形式的には、適用可能な他のどのメソッド オーバーロードよりも適切なメソッド オーバーロードが選択されます。他のどのオーバーロードよりも適切なオーバーロードを 1 つに絞り込めない場合は、あいまいな一致と見なされ、コンパイル エラーが生成されます。「より適切なメソッド オーバーロード」を参照してください。