Java FAQ:匿名クラス

Java FAQ:S016 Q-06

class の場合

class C2008053001 {
    void foo() {}
}

public class C2008053000 {
    public static void main(String[] args) {
        C2008053001 c = new C2008053001() {
            void foo () {
                System.out.println("foo");
            }
        };

        c.foo();
    }
}

で、

foo

特異メソッドのようなことにも使えるってこと?


interface の場合

interface C2008053011 {
    void foo();
}

public class C2008053010 {
    public static void main(String[] args) {
        C2008053011 c = new C2008053011() {
            public void foo () {
                System.out.println("foo");
            }
        };

        c.foo();
    }
}

で、

foo


変数へのアクセス

class C2008053021 {
    void foo() {}
}

public class C2008053020 {
    int x = 1;
    C2008053021 c;

    C2008053020() {
        c = new C2008053021() {
            void foo () {
                System.out.println(C2008053020.this.x);
            }
        };

        c.foo();
    }

    public static void main(String[] args) {
        new C2008053020();
    }
}

で、

1