Java FAQ:メソッドの中でメソッドを定義?

Java FAQ:S011 Q-24

public class C2008050300 {
    public static void main(String[] args) {
        class C2008050301 {
            static void foo() {
                System.out.println("foo");
            }
        }

        C2008050301.foo();
    }
}

で、

C2008050300.java:10: 内部クラスが static 宣言を持つことはできません。
            static void foo() {
                        ^
エラー 1 個
  • 同じように書いたつもりなのだが?
  • クラス内部に書かないメソッドってあるんだっけ?
public class C2008050310 {
    public static void main(String[] args) {
        class C2008050311 {
            void foo() {
                System.out.println("foo");
            }
        }

        new C2008050311().foo();
    }
}

で、

foo

「new C2008050311().foo();」を「new C2008050311.foo();」と間違えると「シンボルを解釈処理できません」と言われてしまう…