private
Subクラスの4行目をを次のように変更し、保存してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package step10; public class Sub { private int num = 1; public Sub(int num1) { System.out.println("Sub Start"); num = num1; } public void print() { System.out.println("Sub"); } } |
クラスMainでエラーになりました。
エラーになった原因はクラスSubの4行目の「public」を「private」に変更したからです。publicはどこからでもアクセスできますが、privateはそのクラス内でしか利用できません。従ってSubクラスの変数hensuはMainクラスから利用できなくなったのです。
public、privateは変数だけでなくメソッドにも付けれます。変数と同様にprivateとしたメソッドは他クラスから利用できなくなります。
ゲッター、セッター
一般的にクラス内の変数はprivteとし他クラスからアクセスできないようにします。これはオブジェクト指向という考え方からきてます。(ウィキペディア)
しかし他クラスからアクセスが必用な場合があります。その時はpublicなメソッドを用意して変数を参照、設定できるようにします。プログラムで確認しましょう。クラスSubに11行目~17行目を追加してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package step10; public class Sub { private int num = 1; public Sub(int num1) { System.out.println("Sub Start"); num = num1; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public void print() { System.out.println("Sub"); } } |
次にMainクラスの8行目を修正してください。
1 2 3 4 5 6 7 8 9 10 |
package step10; public class Main { public static void main(String[] args) { Sub hensu = new Sub(7); hensu.print(); System.out.println(hensu.getNum()); } } |
SubクラスのgetNum、setNumメソッドが外部クラスから変数を参照、設定するためのメソッドです。これらをセッター、ゲッターメソッドと言います。Mainクラスでは8行目のようにゲッター、セッターメソッドを利用して変数にアクセスします。
ゲッター、セッターメソッドは命名のルールがあります。変数の頭1文字目を大文字にして参照するメソッドはgetを、設定するメソッドはsetを先頭につけます。
this
セッターメソッドで次の行が気になった人がいるかと思います。。
15 16 17 |
public void setNum(int num) { this.num = num; } |
この「this」の部分です。thisは自分自身を示しています。つまりthis.numはこのクラスの変数numを示しています。セッターメソッドの引数は慣習的に値を設定する変数と同名にします。そのため引数とクラス内の変数を区別するためにthisを記述します。