【1】sample05 フォルダをフォルダごとコピーして、sample06 フォルダを作ります。
【2】sample06 の PersonTest.java を以下のように変更します。プログラムが長くなってきたので、変更部分だけ図にしています。
保存先 C:\java\sample06
ファイル名 PersonTest.java
class Person {
String name;
int age;
String address;
Person(String _name, int _age, String _address) {
name = _name;
age = _age;
address = _address;
}
void say(){
System.out.println("私の名前は" + name + "です。年齢は"
+ age + "才で、住所は" + address + "です。");
}
}
class PersonTest {
public static void main(String[] args) {
Person[] people = new Person[2];
people[0] = new Person("太郎", 21, "東京都港区");
people[1] = new Person("花子", 18, "北海道札幌市");
for(int i = 0; i < people.length; i++){
people[i].say();
}
System.out.println("データを変更。");
people[0].name = "次郎";
people[0].age = 15;
people[0].address = "福岡県福岡市";
people[1].name = "桃子";
people[1].age = 25;
people[1].address = "宮城県仙台市";
for(int i = 0; i < people.length; i++){
people[i].say();
}
}
}
【3】以下の図を参考に、カレントディレクトリの切り替え、コンパイル、プログラムの実行、結果の確認を行います。
【解説】
(1)まず前回までと同じ部分では、インスタンスを生成するときに、コンストラクタでフィールド変数に値をセットしています。そしてセットした値を使って画面に表示しています。
(2)追加部分では、既に作成済みのインスタンス people[0]、people[0] のフィールド変数を変更し、もう一度画面に出力しています。
フィールド変数は以下のようにアクセスできます。同じフィールド名でもインスタンスごとに区別できます。
インスタンス名.フィールド名 = 値;
*ただし Java のようなオブジェクト指向言語では、上記のようにフィールドに直接アクセスできる状態はよくありません。外部からのフィールドへのアクセスを制限して、メソッドを経由してフィールドを操作するようにしなければなりません。(カプセル化によるクラスの保護)
カプセル化は適切なアクセス修飾子を付けることと、セッター、ゲッターといわれるメソッドを定義することで簡単にできます。次回に試してみましょう。