16.
フィールド
フィールドとは
オブジェクトの特徴
キャラクターの「名前」「職業」「体力」など、「特徴」をクラス定義したものをフィールドといいます。
フィールドの例
- 名前 : アリス
- 職業 : 魔法使い
- 体力 : 30
フィールド定義
フィールド定義はオブジェクトの特徴にあわせて「フィールド名」や「データ型」を決める必要があります。
項目 | フィールド名 | データ型 |
---|---|---|
キャラクター名 | name | String |
職業 | job | String |
体力 | hp | int |
フィールドとメンバー変数
メンバー変数
クラス内に定義する変数をメンバー変数といいます。OOPではインスタンスで扱うメンバー変数(staticでない)のことをインスタンス変数ともいいます。
public class Character {
//メンバー変数(インスタンス変数)
public String name;
}
フィールドとプロパティの違い
フィールドのことをプログラム言語によってはプロパティともいいます。プロパティはフィールドと同じ概念ですが、Javaではgetter/setter(アクセサ)のフィールドをプロパティといいます。
フィールド定義の基本
フィールド定義はクラスの中に「修飾子」「データ型」「変数名」を記述します。
public class クラス名 {
//フィールド定義
修飾子 データ型 変数名;
}
アクセス修飾子
アクセス修飾子を使うと「クラス」「フィールド」「メソッド」のアクセスを外部プログラムから制限します。
アクセス修飾子 | 範囲 |
---|---|
public | すべてのクラスからアクセス |
protected | 自分のクラスとサブクラスからアクセス |
なし | 自分のクラスと同じパッケージのクラスからアクセス |
private | 自分のクラスからだけアクセス |
クラスの生成
Characterクラスを作成して、フィールド定義してみましょう。
ファイル構成
src/
└── rpg/
├── App.java
└── Character.java
フィールド定義
プログラミングする前に、生成するオブジェクトの特徴を定義しておきます。
項目 | フィールド名 | データ型 | アクセス修飾子 |
---|---|---|---|
キャラクター名 | name | String | public |
職業 | job | String | public |
体力 | hp | int | public |
クラスファイルにフィールド定義
Characterクラスにフィールド定義します。
rpg/Character.java
package rpg;
public class Character {
public String name;
public String job;
public int hp;
}
フィールドのアクセス
. (ピリオド)をつけてアクセス
フィールドはインスタンスオブジェクトに「 . 」(ピリオド)をつけてアクセスします。メンバー変数のアクセスはフィールド名で指定します。
インスタンス.フィールド名
フィールドのアクセスの例
wizardオブジェクトのnameフィールドにアクセスすします。Characterクラスがpublicになっているので外部からアクセス可能です。
wizard.name
フィールドのデータ表示
Characterオブジェクトのデータをコンソールで確認してみましょう。
rpg/App.java
public static void main(String[] args) {
Character wizard = new Character();
System.out.println(wizard.name);
System.out.println(wizard.job);
System.out.println(wizard.hp);
}
Characterオブジェクトのフィールドデータが表示されました。現在は何も設定していないので「null」「0」が表示されます。
結果
null
null
0
フィールドの利用
フィールドにデータを代入
フィールドにデータを代入します。
wizard.name = "アリス";
データの確認
wizardインスタンスのフィールドに、データを代入して確認してみましょう。
rpg/App.java
public static void main(String[] args) {
Character wizard = new Character();
System.out.println(wizard);
wizard.name = "アリス";
wizard.job = "wizard";
wizard.hp = 30;
System.out.println(wizard.name);
System.out.println(wizard.job);
System.out.println(wizard.hp);
}
結果
アリス
wizard
30
新規インスタンス
別のキャラクターのインスタンスwarriorを作成し、フィールドを設定します。
rpg/App.java
public static void main(String[] args) {
...
//warriorインスタンスを生成
Character warrior = new Character();
warrior.name = "ボブ";
warrior.job = "warrior";
warrior.hp = 50;
System.out.println(wizard.name);
System.out.println(wizard.job);
System.out.println(wizard.hp);
}
このようにCharacterクラスを元に、キャラクターの特徴が違った別々のオブジェクトが生成できます。
結果
ボブ
warrior
50
演習
問題1
zooパッケージにAnimalクラスを作成し、つぎの内容でフィールドを定義してみましょう。
項目 | フィールド名 | データ型 | アクセス修飾子 |
---|---|---|---|
種別 | type | String | public |
名前 | name | String | public |
鳴き声 | crying | String | public |
問題2
zooパッケージにメインプログラムAnimalAppを作成し、Animalインスタンスを生成してみましょう。
プログラム例
Animal dog = new Animal();
問題3
Animalインスタンスに、つぎの内容でフィールドデータを更新して確認してみましょう。
項目 | フィールド名 | 値 |
---|---|---|
種別 | type | dog |
名前 | name | タロー |
鳴き声 | crying | わん! |