Java オブジェクト内のメソッドは、いずれもメソッドと同じ名前のメッセージを送信することによって呼び出されます。また、COBOL プログラムのクラス制御段落で宣言したクラス名にメッセージを送信して、Java クラスの静的メソッドを呼び出すこともできます。Java ではメソッド名の大文字、小文字が区別されるため、COBOL プログラム内に記述するメッセージ名は、Java の対応するメソッドと大文字、小文字の区別まで一致させる必要があります。
Java にはメソッドのオーバーロード機能があり、渡されるパラメーターの数と型に応じて、同じ名前のメソッドの実装を変えることができます。この機能に必要な COBOL 側の処理は内部的に実行されるため、常に適切な Java メソッドが呼び出されます。
たとえば Rectangle クラスには、互いに異なるパラメーターを受け取る 3 種類の add() メソッドがあります。次の Java コードは、Rectangle の add() メソッドを呼び出す 3 通りの方法を示しています。
Rectangle r1 = new Rectangle(0,0,0,0) ; Point pt = new Point(6,6) ; Rectangle r2 = new Rectangle(3,4,9,9) ; r1.add(4,5) ; // changes r1 to smallest rectangle // containing r1 and point 4,5 r1.add(pt) ; // changes r1 to smallest rectangle // containing r1 and Point pt. r1.add(r2) ; // changes r1 to union of r1 & r2
これに相当する COBOL のコードは次のようになります。
repository. class jRectangle as"$java$java.awt.Rectangle" class jPoint as "$java$java.awt.Point" . working-storage section. 01 r1 object reference. 01 r2 object reference. 01 pt object reference. procedure division. invoke jRectangle "new" returning r1 invoke jPoint "new" using 4 5 returning pt invoke jRectangle "new" using 3 4 9 9 returning r2 invoke r1 "add" using 4 5 invoke r1 "add" using pt invoke r1 "add" using r2
r2 と pt はどちらもオブジェクト参照型のデータ項目ですが、COBOL ランタイム システムは Java オブジェクトの型を判断して適切な Java メソッドを呼び出します。