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 メソッドを呼び出します。