です。なぜ匿名クラスは、私は、Javaの匿名クラスが何であるかについての誤解を持っている静的コンテキストで有効
public static void main (String[] args) throws java.lang.Exception
{
B b = new B(){ };
System.out.println(b.b);
}
interface B{ int b = 1; }
なぜコードはコンパイルん:次の簡単な例を考えてみましょうか? JLS, chapt 15さんのコメント:
匿名クラスは常に内部クラス(8.1.3)です。それは 静的
ことはありません。しかしJLS, chapt 8
内部クラスは、明示的または暗黙的に 静的宣言されていないネストされたクラスです。
だから、匿名クラスは内部クラスです。しかし、私たちは静的なコンテキストでそれらを使用します。なぜここで正しいのですか?
'B b = new B(){};'は匿名クラスではありません。静的コンテキストで*使用されているため動作しますが、内部クラス自体が静的であることを宣言しています。 –
@Shywimしたがって、 'new B(){}'によって作成されたオブジェクトはどのような型ですか? –