1

プライベート内部インターフェイスを実装するプライベート内部クラスがあります。私は通常、プライベート内部クラス内のプライベート修飾子を省略して、コードをよりクリーンにします。残念ながら、この状況では、実際に可視性を減らしていないにもかかわらず、「可視性エラーを減らすことができません」というメッセージが表示されます。

public class Foo {
    private interface IBar{
        void foo();
    }

    private static class Bar implements IBar{
        @Override
        public void foo() { // Must be public :(
        }
    }
}

これを回避する方法はないと思いますか?

4

3 に答える 3

7

インターフェイスのすべてのメソッドはpublicabstractです。それがルールです。

異なるパッケージからの可能性があるクラスを実装することによって実装されるため、それらを作成することだけpublicが理にかなっています。

たとえそれがインナーinterfaceであっても、それでもinterfaceルールは変わりません。

于 2013-08-22T09:37:07.197 に答える
1

インターフェイスのすべてのメソッドを宣言する必要がありますpublic。メソッドにアクセス修飾子を指定しないと、デフォルトでアクセスfooが割り当てられpackage protectedます。コードpackage protectedよりもアクセスしにくいため、メソッドのアクセシビリティが低下しています。publicfoo

于 2013-08-22T09:37:45.073 に答える
0

のすべてのメソッドintefacepublicおよびabstractです。修飾子を定義しない場合、デフォルトではpublicandabstractです。

オーバーライドの一般的なルールは、メソッドの可視性を下げることはできないということです。クラス内で修飾子を定義しない場合、デフォルトではデフォルトになり、デフォルトはパブリックよりも見えにくくなります。したがって、ここでは公開する必要があります

于 2013-08-22T09:43:19.143 に答える