インスタンスから static メソッドを呼ぶ
出力はどれか。
public class Main {
public static void main(String[] args) {
Tally a = new Tally();
Tally b = new Tally();
a.inc();
b.inc();
Tally.inc();
System.out.println(a.n + " " + b.n);
}
}
class Tally {
static int n;
static void inc() {
n++;
}
}
- A
3 3 - B
1 1 - C
2 1 - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: static メソッドはどのインスタンスから呼んでも同じ n を増やすので 3、a.n も b.n も同じ変数です。
- B: static 変数は1つしかないので、3回の inc で 3 になります。
- C: a.n と b.n は同じ static 変数を指します。
- D: インスタンス経由で static メンバを使うことは (推奨されませんが) できます。
ポイント
- static メンバはインスタンス経由でも使えます (推奨はされません)。どれも同じ Tally.n を増やします。