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 = "アリス";
フィールドデータの更新と確認
Characterオブジェクトのフィールドに、データを代入して確認してみましょう。
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
演習
問題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 | わん! |