フィールドとは

オブジェクトの特徴

キャラクターの「名前」「職業」「体力」など、「特徴」をクラス定義したものをフィールドといいます。

フィールドの例

  • 名前 : アリス
  • 職業 : 魔法使い
  • 体力 : 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 わん!