パッケージの作成と利用
名前衝突を避ける為、アクセス制御するために、相互関係にある型は一般的にパッケージされます。
- 型の間に関連性があるということが、誰にでも容易に判る。
- 関連機能を提供しているクラスがどこにあるのか判る。
- パッケージによって名前空間が作成されるので、名前衝突しない。
- 同一パッケージ内の型からは無制限でアクセスを許可するが、パッケージ外からの型アクセスを制限する。
パッケージを作成する
publicでない全ての型は、パッケージプライベートと呼ばれる。package文を書かなかった場合、無名パッケージに入れられる。
パッケージに名前をつける
命名上のしきたり
納入先の会社のドメインが
http://ch3cooh.jp/
で、プロジェクト名がproject、機能名がfunctionだった場合、
package jp.ch3cooh.project.function;
みたく命名するらしい。
一般的には、組織内の慣習があるのでそれに従うべきだって。
パッケージメンバーを使用する
パッケージメンバーを限定名で参照する
helloworldパッケージにSuperClassクラスがあるとして、
package helloworld;
public class SuperClass {
// メソッドとか
}
ch3coohパッケージのSakusanクラスから使用する場合は、下記の様なコードになります。
package ch3cooh;
public class Sakusan {
helloworld.SuperClass superCls = new helloworld.SuperClass();
}
パッケージメンバーをインポートする
ch3coohパッケージのSakusanクラスからhelloworldパッケージのSuperClassクラスがを使用する場合は、完全限定名を指定して使用します。下記の様なコードになります。
package ch3cooh;
import helloworld.SuperClass;
public class Sakusan {
SuperClass superCls = new SuperClass();
}
パッケージ全体をインポートする
ch3coohパッケージのSakusanクラスからhelloworldパッケージのSuperClassクラスがを使用する場合は、パッケージ全てをインポートしても使用出来ます。下記の様なコードになります。
package ch3cooh;
import helloworld.*;
public class Sakusan {
SuperClass superCls = new SuperClass();
}
パッケージの見かけ上の階層について
に存在している型を使いたい場合、
をインポートしても、パッケージ名は包含関係を表しているものではありませんので、
使用する事は出来ません。
名前の曖昧さ
Dogクラスと名前が被った場合、曖昧さを解決するためにパッケージを指定する必要があります。