オブジェクト指向プログラミングでは「静的」「動的」という言葉がよく登場します。今日は「静的な」の意味をもつstatic修飾子に関する問題です。
問題 - static修飾子「難易度:高」
次のように、static修飾子をつけたメンバ変数nameをもつPersonクラスがあります。
public class Person() {
static String name;
このクラスを使って次のプログラムを記述しました。
Person yamada = new Person();
yamada.name = "山田太郎";
Person tanaka = new Person();
tanaka.name = "田中一郎";
さて、次の2つの出力結果はどうなるでしょうか?
【1】 System.out.println(yamada.name);
【2】 System.out.println(tanaka.name);
オブジェクト指向プログラミングでは「静的」「動的」という言葉がよく登場します。今日は「静的な」の意味をもつstatic修飾子に関する問題です。
問題 - static修飾子「難易度:高」
次のように、static修飾子をつけたメンバ変数nameをもつPersonクラスがあります。
public class Person() {
static String name;
このクラスを使って次のプログラムを記述しました。
Person yamada = new Person();
yamada.name = "山田太郎";
Person tanaka = new Person();
tanaka.name = "田中一郎";
さて、次の2つの出力結果はどうなるでしょうか?
【1】 System.out.println(yamada.name);
【2】 System.out.println(tanaka.name);
解答
【1】【2】ともに出力結果は「田中一郎」。
解説
Personクラスのメンバ変数nameにはstatic修飾子がついています。static修飾子のついたメンバ変数はクラスメンバ変数と呼ばれ、生成したオブジェクトごとに割り当てられるのではなく、クラスに1つだけ割り当てられる変数です。 今回の場合は、Personクラスからyamadaとtanakaという2つのオブジェクトを生成しましたが、yamada.nameとtanaka.nameはともにクラスに1つだけの同じクラスメンバ変数nameを参照しているので、結果はともに後から代入された「田中一郎」となります。
クラスメンバ変数はどんなときに使うと便利なのか、ひまなときに考えてみてね。