フィールドをアクセス修飾子の private で隠したので、他のクラスからは直接操作できなくなりました。しかし他のクラスからフィールドのデータを取得したいこともあります。
そこで外部に公開した public なメソッドを作り、戻り値としてフィールドの値を呼び出し元に返すようにします。
Javaではゲッターのメソッド名は、get + フィールド名(頭文字を大文字)という特別な命名方法が推奨されています。
【1】sample08 フォルダをフォルダごとコピーして、sample09 フォルダを作ります。
【2】sample09 の Person.java と PersonTest.java を以下のように変更します。
保存先 C:\java\sample09
ファイル名 Person.java
public class Person {
private String name;
private int age;
private String address;
public Person(String _name, int _age, String _address) {
name = _name;
age = _age;
address = _address;
}
public void say(){
System.out.println("私の名前は" + name + "です。年齢は"
+ age + "才で、住所は" + address + "です。");
}
public void setName(String _name){
name = _name;
}
public void setAge(int _age){
if (_age > 0) {
age = _age;
}else{
age = 0;
}
}
public void setAddress(String _address){
address = _address;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getAddress(){
return address;
}
}
保存先 C:\java\sample09
ファイル名 PersonTest.java
public class PersonTest {
public static void main(String[] args) {
Person[] people = new Person[2];
people[0] = new Person("太郎", 21, "東京都港区");
people[1] = new Person("花子", 18, "北海道札幌市");
System.out.println("----- say()メソッドで表示");
for(int i = 0; i < people.length; i++){
people[i].say();
}
//セッターでデータを設定
people[0].setName("次郎");
people[0].setAge(-15);
people[0].setAddress("福岡県福岡市");
people[1].setName("桃子");
people[1].setAge(-25);
people[1].setAddress("宮城県仙台市");
System.out.println();
System.out.println("-----ゲッターでデータを取得して表示");
for(int i = 0; i < people.length; i++){
System.out.println(people[i].getName() + " "
+ people[i].getAge() + " " + people[i].getAddress() );
}
}
}
【3】以下の図を参考に、カレントディレクトリの切り替え、コンパイル、プログラムの実行、結果の確認を行います。
【解説】
(1)ゲッターの仕組みは簡単で、フィールドの値を戻り値として return で呼び出し元に返しているだけです。メソッドの戻り値の型は返すフィールドの型と一致させます。
public String getName(){
return name;
}
*フィールドの name は String型なので、getName()メソッドの戻り値も String型です。
(2)ゲッターの呼び出し方は以下のようになります。
people[i].getName()
(3)say() メソッドは、Person クラス側で画面に出力していますが、ゲッターを呼び出している部分は、戻り値を呼び出し元で出力しています。呼び出し元で出力するメリットは、表示の仕方を手軽に変えることができることです。
(4)表示を見やすくするように空の行を出力しています。
System.out.println();
これでカプセル化が完成しました。このようにフィールドへはセッターやゲッターを使って間接的にアクセスします。