メソッドは、同じインスタンスのフィールドを使うことができます。
今回はその方法について見てみましょう。
メソッドからフィールドを使う
フィールドとメソッドの両方を持つクラスを作ってみます。
/**
* メソッドとフィールドを持つクラス。
*/
class HasMethodAndField
{
// int型変数のフィールドです。
int data;
/**
* dataフィールドを出力するメソッドです。
*/
void printData()
{
System.out.println( data );
}
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class HasMethodAndFieldRunner
{
public static void main( String[] args )
{
// HasMethodAndFieldクラスの参照型変数とインスタンスを作ります。
HasMethodAndField ref = new HasMethodAndField();
// dataフィールドに数値を入れます。
ref.data = 100;
// printData()メソッドを呼び出します。
ref.printData();
// 出力結果:
// 100
}
}
// HasMethodAndFieldRunner.java /** * メソッドとフィールドを持つクラス。 */ class HasMethodAndField { // int型変数のフィールドです。 int data; /** * dataフィールドを出力するメソッドです。 */ void printData() { System.out.println( data ); } } /** * 実行用クラス。このクラスを実行してください。 */ class HasMethodAndFieldRunner { public static void main( String[] args ) { // HasMethodAndFieldクラスの参照型変数とインスタンスを作ります。 HasMethodAndField ref = new HasMethodAndField(); // dataフィールドに数値を入れます。 ref.data = 100; // printData()メソッドを呼び出します。 ref.printData(); // 出力結果: // 100 } }
このプログラムのHasMethodAndFieldクラスは、dataフィールドとprintData()メソッドを持っています。
* メソッド1つだけ持つクラス。
*/
class HasMethodAndField
{
// int型変数のフィールドです。
int data;
/**
* dataフィールドを出力するメソッドです。
*/
void printData()
{
System.out.println( data );
}
}
/** * メソッド1つだけ持つクラス。 */ class HasMethodAndField { // int型変数のフィールドです。 int data; /** * dataフィールドを出力するメソッドです。 */ void printData() { System.out.println( data ); } }
このように、フィールドとメソッドをクラスの中に並べて書くことができます。
ちなみに上下の順番は関係ありません。メソッドの下にフィールドを書いてもいいのですが、フィールドを最初に書いてその後メソッドを書くことが慣習的に多いです。
これまで説明したとおり、フィールドとメソッドはインスタンスを作らないと使えません。
HasMethodAndField ref = new HasMethodAndField();
// HasMethodAndFieldクラスの参照型変数とインスタンスを作ります。 HasMethodAndField ref = new HasMethodAndField();
インスタンスを作ると、インスタンスの中にフィールドとメソッドが作られます。
前のページで説明したように、printData()メソッドを呼び出して、その中の処理を実行することができます。
ref.printData();
// printData()メソッドを呼び出します。 ref.printData();
つまり、以下のprintData()メソッドに処理が移るということです。
{
System.out.println( data );
}
void printData() { System.out.println( data ); }
この中で「data」という変数の値を出力しています。
この「data」は「dataフィールド」です。フィールドとして持っているdataフィールドの値を出力しています。
注意して欲しいのは、このdataフィールドは「printData()メソッドがあるインスタンスの中にあるdataフィールド」ということです。
フィールドとメソッドは、共にインスタンスの中に入っています。
メソッドの中でフィールドを使うと、それは「同じインスタンスにあるフィールド」ということになります。
「別のインスタンス」のフィールドを使いたい場合には、「2.7 フィールドに参照型変数は使えるの?」で説明したように、参照型変数を通して「別のインスタンス」を指定してフィールドを使うことになります。
慣れない内は、クラスに書かれたメソッドと、インスタンス内のフィールドの結びつきが分かりづらいかもしれません。
そのため、最初は「メソッドはインスタンスの中にある」ということをしっかりイメージするようにしましょう。
つまり、インスタンスが作られるたびに
{
System.out.println( data );
}
void printData() { System.out.println( data ); }
というメソッドがインスタンス内に作られるんだ、ということをイメージするようにしましょう。
そうすれば、メソッドがフィールドを使う時に「同じインスタンス内のフィールドを使う」というイメージも作りやすいでしょう。