パッケージの役割とimport文の記述
クラスはパッケージというものに所属させないといけない
ソースコードの先頭に package 所属させたいパッケージ名; を記述
ex. palkage calcapp.main;
パッケージ名は小文字で記述する
パッケージはそれぞれ独立しているので、パッケージ内にパッケージを入れることは不可。大きいパッケージの中に小さいパッケージが入っているような状態は成立しない。
「パッケージ名.クラス名」のことを完全限定クラス名(FQCN)という。
どのパッケージにも所属してないものは無名のパッケージに自動で所属される
→そのため、結局どのクラスもいずれかのパッケージに必ず所属することとなる
そもそもなぜパッケージに必ず所属させないといけないのか?
呼び出す時に区別できないので、クラス名は他のどんなクラス名ともかぶってはいけない。
・・・ただクラス名はそんなに長くないので、大規模な開発で全くかぶらないクラス名をつけることは不可能に近い!そもそも手分けをして開発しているので、他の人がどんなクラス名をつけてるかなんて分からない。
→そこで パッケージ名.クラス名にすることで、同じクラス名でも使用できるようになる(パッケージ名で区別できるようになるから)
要するに
パッケージを使うことによって、自由にクラス名をつけることが可能になる
ただパッケージ名で区別できるといっても、パッケージ名がかぶってしまうと区別できなくなるのでは?
そのような事態を防ぐために、
パッケージ名は「保有するインターネットドメインを前後逆にしたもの」
から始めることが推奨されている
ex. foo.example.com→com.example.foo
ただクラスを呼び出す時に完全限定クラス名(FQCN)を何度も書くのは面倒
int total=calcapp.logics.calclogic.tasu(a,b);
↑ 完全限定クラス名(FQCN)
これを解決するために import文を使う
import文を書くと、毎回クラスを呼び出す時に完全限定クラス名を記述しなくても、
記述してあるのと同じ扱いになる
import文を書く場所は
ソースコードの先頭らへん package文のすぐ後
ex. package calcapp.main; ←パッケージ文
import calcapp.logics(引用元のパッケージ名)calcLogic;(引用元のパッケージのクラス名)
・・・「この文のソースコードに単にcalcLogicという表記があったら、
それはcalcapp.logics.calcLogicのことだと解釈しなさい」という指示
ex. クラス Calc{
mainメソッド{
int total=calcLogic.tab(a,b);
↑クラス名(FQCNでなくてもOK)
※ import宣言はあくまで「面倒さ軽減機能」であって、命令ではないので注意!
(メソッドを呼び出して動作させたりしているわけではないということ)