2017-09-21 14 views
1

内部クラスは静的フィールドと非静的な静的な表現を許可します - なぜですか? JLS 1として

内部クラスは、明示的または暗黙的に ではありませんstaticとして宣言ネストされたクラスです。内部クラスは、静的初期化子 またはメンバインタフェースを宣言することはできません。

私の次のコードは正常にコンパイルされています。 Cは暗黙的に静的である理由

class A { 
    interface B { 
     class C { // Inner class having static variables. 
      static int d; // Static variable 
      static { 
      } 
     } 
    } 
} 

いくつかのいずれかが、私はこの振る舞いに

+2

'C'は暗黙のうちに' static'ですが、内部クラスではありません。 –

+0

ネストしたクラス**は**暗黙のうちに静的と宣言されています。インターフェイスは内部クラスを持つことができないためです。暗黙的に静的なインターフェースBと同じです。 –

答えて

4

実測JLS仕様:

8.5.2 -

9.5 "メンバーインターフェイスが常に暗黙静的で" - 「インターフェースは、メンバー型宣言(8.5)を含んでいてもよいメンバー型。インターフェースで宣言は、暗黙的に静的およびこれは上記のコードを意味する道徳的(暗黙修飾子は大文字の文字で書かれている)に相当する

パブリック」である。

2

ネストされたインターフェースを理解するのに役立ちますが、暗黙的に静的であり、非静的コンテキスト自身を持っていない、というのです。

1

インターフェイス内でクラスを定義できます。インタフェースの内部では、内部クラスは暗黙的にpublic staticです。 ...インタフェースにはメンバ型宣言が含まれる可能性があります。インタフェース内のメンバ型宣言は、暗黙的に静的で公開されています。

ので、我々は、静的メソッドまたは静的クラス静的ブロックに非静的メンバーを宣言することはできません。同じ用

関連する問題