4

内部 (静的ではないネストされた) クラスをインターフェイスに定義できるのはなぜですか?

意味はありますか?インターフェイスをインスタンス化できないため、それらを含むインターフェイスのインスタンス内に存在することはできません...

以下はコンパイルします:

interface MyInterface
{
    static class StaticNestedClass
    {
        static int a()
        {
            return 0;
        }
        int b()
        {
            return 1;
        }
    }
    class InnerClass
    {
        static int a()
        {
            return 0;
        }
        int b()
        {
            return 1;
        }
    }
}

上記の2つのクラスに違いはありますか?static実際に考慮されていますか?interfaceで変更すると、明らかに'classでコンパイル エラーが発生することに注意してください。InnerClassstatic int a()

さらに、以下をご覧ください。

interface MyInterface
{
    int c=0;
    static class StaticNestedClass
    {
        static int a()
        {
            return c;
        }
        int b()
        {
            return c+1;
        }
    }
    class InnerClass
    {
        static int a()
        {
            return c;
        }
        int b()
        {
            return c+1;
        }
    }
}

外側の包含エンティティがクラスである場合とは異なり、ここではもちろん、「内側の (静的ではないネストされた) クラスは外側のフィールドにアクセスできるが、静的なネストされたクラスはアクセスできない」というようなことはありません。はインターフェイスであり、c整数は暗黙的に静的です...interfaceのネストされたクラスも暗黙的に静的ですか?

繰り返しになりますがStaticNestedClass、 とはInnerClassまったく同じですか?

4

1 に答える 1

3
class InnerClass 

暗黙的に( JLS、セクション9.5に従ってコンパイラによって変換されます)

インターフェイスのメンバー型宣言は、暗黙的に静的でパブリックです。これらの修飾子のいずれかまたは両方を重複して指定することは許可されています。

static class InnerClass

インターフェースにあるからです。

非静的内部クラスは許可されておらず、クラスの場合は暗黙的に静的に変換されないため、インターフェイスをクラスに変更するとエラーが発生します。

最後の質問に直接答えるには、

はい、StaticNestedClassまったくInnerClass同じです

于 2013-10-17T16:58:20.450 に答える