オブジェクトのフィールド操作に関する理解を深めましょう。
問題
次のコードを実行したときの結果として正しいものを選んでください。Javaのフィールドへのアクセス方法に注目してください。
class Car {
public String color;
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car();
myCar.setColor("Red");
System.out.println(myCar.color);
}
}
選択肢
- A. Red
- B. コンパイルエラー
- C. null
- D. 実行時エラー
答えと解説
回答を見る
答え
A. Red
解説
基本説明:
このプログラムは、Car クラスのフィールド color に値を書き込み、読み取るという基本的な操作を行っています。
まず、Car クラスには、color
というフィールドがあります。これは String 型で、車の色を表します。
setColor
メソッドを使って、color フィールドに「Red」を代入しています。そして、main メソッドでSystem.out.println(myCar.color);
を使って、その color フィールドに代入された値をコンソールに表示しています。
そのため、出力は「Red」となります。
誤答理由:
選択肢BのコンパイルエラーやDの実行時エラーが選ばれることがありますが、どちらも不正解です。
このプログラムは適切にコンパイルされ、実行されるため、これらの選択肢は誤りです。また、選択肢Cのnullも誤りです。
color フィールドに対して適切に値が設定されているため、null ではなく、実際に設定した「Red」が出力されます。
つまずきポイント:
よく、Javaのフィールドやメソッドの使い分けに戸惑うことがありますが、重要なのは、フィールドはオブジェクトの状態を保持し、メソッドはその状態を操作できるということです。
このプログラムでは、setColor メソッドが car の状態を設定し、getColor メソッドはその状態を取得するためのものです。愚直に main メソッドでフィールドに値を直接設定しても同じ結果が得られます。
発展知識:
ここで学ぶべきもう一つの点は、オブジェクト指向プログラミングにおける「カプセル化」の考え方です。
カプセル化とは、データを保護し、外部からの不正なアクセスを防ぐために、できるだけフィールドを private にしてメソッドを通じてアクセスすることです。
このプログラムではそれに反する形でフィールドが public になっていますが、通常はフィールドを private にし、setColor や getColor のようなメソッドを通じてアクセス可能にするのが望ましい手法です。