Java Gold11の勉強をしていて分からない設問があった。
(使用している参考書は黒本です。)
下記のコードを実行するとどうなるか?
public class Outer{
void test(){
Inner.message = "Hello, Java";
}
class Inner{
private static String message;
public void test(){
System.out.println(message);
}
}
public static void main(String[] args){
Outer outer = new Outer();
outer.test();
outer.new Inner().test();
}
}
A.「null」と表示される
B. 「Hello, Java」と表示される
C. コンパイルエラーが発生する
D. 実行時に例外がスローされる
正解は....「C. コンパイルエラーが発生する」だそうです。
解説では、
「 (staticではない)インナークラスには、staticなフィールドやメソッドを定義することはできません。これらはあくまでもstaticなネストしたクラスにしか定義できないことに注意してください。反対に、staticなネストしたクラスには、staticなものも、そうでないものも定義できます」
「Outerクラスの中にインナークラスInnerが定義されています。Innerはstaticなネストしたクラスではないため、前述のとおりstaticなフィールドやメソッドは定義できません。」
しかし、手元でコードを動かすと...コンパイルできるやんけ!!
有識者の方、上記教えてください....