2011-12-04 8 views
30

私はMap.Entryインターフェイスを介して読んでいましたが、私はそれが「静的な」インターフェイスであることに気がつきました。私は静的インターフェースが何であるかをよく理解していませんでしたし、通常のインターフェースとどう違うのでしょうか?Javaの静的インターフェースとは何ですか?

public static interface Map.Entry<K,V>

これはインタフェースの定義です。ここの文書:http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html

+3

可能な複製http://stackoverflow.com/questions/71625/why-would-a-static-inner-interface-be-used-in-java –

+0

参照http://stackoverflow.com/questions/71625 /なぜ静的な内部インタフェースを使用するJavaで – esaj

+0

それは内部のインターフェイスには関係ありませんか? – brainydexter

答えて

30

私はそれが内部インターフェイスではありません場合について興味があります。

static修飾子は、ネストされたクラスまたはインターフェイスでのみ許可されます。あなたの例では、EntryMapインターフェイス内にネストされています。

インターフェイスの場合、static修飾子は実際にはオプションです。とにかく外側のthisにアクセスできるコードがないため、この区別はインターフェイスには意味がありません。

+0

それを指摘してくれてありがとう。 Entryが内部インターフェースであり、静的修飾子がネストされたクラス/インターフェースでのみ許可されているという事実を知らなかった。 – brainydexter

+11

"この区別はインターフェイスには意味がありません" ...これは多くのことを混乱させるものです。違いはありません。インタフェースに「static」キーワードを許可してはいけません。私はここにいますか? –

+0

私はその説明を理解していません。私は静的メソッドはあなたが上書きすることはできませんメソッドを理解するように、クラスについては静的な場合は、それをオーバーライドすることはできませんメソッドはすべて静的であるが、インターフェイスは静的にすることはできませんそれをオーバーライドすることができるメソッド。だから私はインターフェイスが静的になる方法を理解していない? –

4

静的内部インターフェイスと内部インターフェイスは同じですが、すべてのアクセスルールは内部静的クラスと同じです。したがって、内部インターフェイスは、その親クラス/インターフェイスにアクセスできる場合にのみアクセスできます。下記の場合、Aにはデフォルトのアクセス修飾子があるため、インターフェースAのパッケージからのみインターフェースBにアクセスできます。 BTW:インタフェースBは静的であってもなくてもよい。

interface A { 
    void testA(); 
    public interface B { 
     void testB(); 
    } 
} 
+0

私は内部のインターフェイスではない場合、私は骨董品です。 – brainydexter

関連する問題