Revised: Dec./28th/2001: Since: Dec./28th/2001
前節では同じクラス内のメソッドの利用について考えました。本節では異なるクラスのメソッドの利用について考えてみます。
別のクラスを利用する為には、利用するクラスをインスタンス化してオブジェクトを生成する必要があります。インスタンス化されたオブジェクトのメソッドにメッセージを送って操作するわけです。
「インスタンス化」の節で説明しましたが、ここでもう一度インスタンス化の基本構文を載せておきます。
//インスタンス化 クラス名 インスタンス変数名; インスタンス変数名=new クラス名();
または、
//インスタンス化 クラス名 インスタンス変数名=new クラス名();
インスタンスのメソッドの利用:
インスタンス変数名.メソッド名();
メンバ変数の利用:
インスタンス変数名.メンバ変数名;
別のメソッドのクラスをインスタンス化し、そのメソッドを利用しましょう。簡単な具体例は「クラスの開発と利用」の節で紹介しましたが、改めて紹介します。
TestMethod2.java
:
class TestMethod2{ public static void main(String args[]){ int x; //インスタンス化 Calcu inst=new Calcu(); //メソッド呼び出し x=inst.plus(10,5); //戻り値を x で受けている System.out.println("10+5: " + x); } } class Calcu{ //戻り値が int 型のメソッド int plus(int a, int b){ return a + b; } }
これは最も単純な例です。
C:\Java>javac TestMethod2.java C:\Java>java TestMethod2 10+5: 15
10+5 の結果が出力されています。
ここで紹介したものは、最も単純な例ですが、全ての場合の基本となるものです。これから新しいことを紹介するたびに、メソッド/メンバ変数の利用法も少しずつ変わりますが、基本はここで紹介したものです。分からなくなったら、ここに戻ってきてください。
呼ばれるメソッドに private
でアクセス制限を掛けてみましょう。同じクラス内からしか呼べなくなります。
class Calcu {
//private 宣言されたメソッド
private int plus(int a, int b) {
return a + b;
}
}
これを無理やり別のクラスから呼ぶと、コンパイルエラーとなり、コンパイルを通りません。解決するためには、 main()
メソッドからアクセスできる別のメソッドを用意して、そのメソッドを介して private
メソッドを利用する必要があります。新しく追加するメソッドだけ考えてみます。
int io(int x, int y) { int z; z = plus(x,y); return z; }
このメソッドが、 Calcu
クラスに新しく追加されます。一方、これを利用する main()
メソッドが含まれるクラスは次のようになります:
class TestMethod2 { public static void main(String args[]) { int x; //インスタンス化 Calcu inst=new Calcu(); //メソッド呼び出し x = inst.io(10,5); System.out.println("10+5: " + x); } }
このように、本体のメソッドにはアクセス制限を掛けて保護し、別のクラスから利用する場合に備えて、対応する入出力専用のメソッドを用意することができます。メソッドを利用したい側では、入出力だけ知っていれば良く、理解が容易でしょう。但し、やりすぎると、本体と利用側のメソッドとの間に十重二十重の階層が生じてしまい、実際の構造が見え辛くなってしまうかもしれませんので程度問題です。