パッケージ宣言の目的
クラス定義時に宣言するパッケージ宣言ですが、このパッケージ宣言には以下のような目的があります。
- クラスの分類を可能にする
- 名前空間の提供と、名前の衝突を避ける
- アクセス修飾子と組み合わせることで、アクセス制御を可能にする
補足① パッケージ宣言をしなくても、デフォルトで「無名パッケージ」に属すことになります。
補足② 「jp.co.xxx」のようにドメイン名を逆にしたものがパッケージ名に利用されますが、これは慣例的なものであって、決まり事ではありません。
また、パッケージ名は名前の重複を避けるために利用するため、できるだけ一意なものが推奨されています。
クラスの分類を可能にする
クラスを複数のパッケージに分けることで、パッケージ単位でのクラス分類が可能となります。
名前空間の提供と、名前の衝突を避ける
大規模な開発であればあるほど、「クラス名の衝突」が起こりうる可能性が高くなります。
これは、もし同名のクラスが複数存在してしまうと、コンパイラやJVMはどちらのクラスを利用すればよいか判断ができず、コンパイルエラーや実行時例外の原因となってしまいます。
そのため、コンパイラやJVMはクラスを「パッケージ名.クラス名」の完全修飾クラス名で扱います。
アクセス修飾子と組み合わせることで、アクセス制御を可能にする
「jp.co.xxx」というパッケージに属している以下のクラスがあるとします。
package jp.co.xxx;
public class A(){
}
package jp.co.xxx;
class B(){
}
Aクラスはアクセス修飾子が「public」なので、「どのクラスからもアクセス可能」ですが、
Bクラスはアクセス修飾子が「なし」なので、「当クラスと同じパッケージのクラスからアクセス可能」となります。
上記のようにアクセス修飾子との組み合わせで、クラスへのアクセスを制御することができます。
コメント