LoginSignup
0
0

(staticでない)インナークラスにstaticなメンバを定義できない???

Posted at

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なフィールドやメソッドは定義できません。」



しかし、手元でコードを動かすと...コンパイルできるやんけ!!
image.png

有識者の方、上記教えてください....

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0