2013-08-22 13 views
6

私はどの言語でもアクセス制御が大好きですが、Javaではアクセス修飾子(またはその不足)をpackage-privateで使用することはほとんどありません。Javaでpackage-privateはいつ使用しますか?

私は内部クラスはprivateprotected、またはpackage-privateすることができますが、外側のクラスだけpackage-privatepublicことができることを実現します。なぜ外部クラスはpackage-privateですが、protectedはできませんか?クラス/メソッド/フィールドをパッケージ全体で見ることができるが、サブクラスでは見えないようにすることの利点は何ですか?

答えて

13

パッケージ外のユーザー(および他のクラス)から実装の詳細を隠す場合は、package-privateのクラスとメソッドを使用します。

たとえば、インターフェイスとそのインターフェイスのインスタンスを作成するファクトリクラスがある場合、実装クラスを別のファイルとして持つことができますが、他の人が使用できないようにパッケージプライベートとマークしたり、 JavaDoc(javadocがpublicのみを表示するように設定されている場合)

jarファイルを封印すると、package-privateメソッドを使用すると、これらのメソッドにアクセスできるユーザーを制限することもできます。メソッドがpublicまたはprotectedの場合、サブクラスは、別のパッケージに入っていても、そのメソッドを見たり呼び出したりすることができます。 (パッケージ化されていないjarでは、パッケージ内のクラスを作成してパッケージ専用メソッドや保護されたメソッドにアクセスできるようになります)

2

多くの場合、同じパッケージ内のピアクラスは同じ作成者なので、これらのクラスは機能します。つまり、これらのクラスのカプセル化されたロジックについて知っています。したがって、クラス間のパッケージ - プライベートアクセスが、アクセスされたクラスのカプセル化されたロジックに従うこと、およびこれらのアクセスが何も破壊しないことを確認できます。

これらの直接アクセスは、最適化やソースコードの量を小さくするのに役立ちます。

なぜ外側のクラスはパッケージプライベートであるかもしれないが、保護されていないのですが、私は答えがありません。

関連する問題