- ベストアンサー
packageとimport の違いって?
packegeって、クラスやインタフェースの集まりなんですよね?で、import文で参照できるようにするんですよね?でも、package~ってソースの冒頭に書く事ってありますよね。でもその後にもimport~って続いて・・・何かpackage~とimport~って明確に使い分けないといけない理由があるのでしょうか?教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
packageは、そのクラスのパッケージを指定しています。 importは、自分の属するパッケージ以外のほかのパッケージを使用する場合に使います。 例1:パッケージ名「hoge.moge」クラス名「MyClass」 package hoge.moge.MyClass; class MyClass{ } 例2:パッケージ名「hoge.moge」クラス名「MyClass」が 別パッケージ「hoge2.moge2」クラス「OtherClass」を使用する場合。 package hoge.moge.MyClass; import hoge2.moge2.OtherClass; class MyClass{ OtherClass oc; } 例2は、import文を使用しなくても、次のように書き換えることができます。 package hoge.moge.MyClass; class MyClass{ hoge2.moge2.OtherClass oc; } でも、これだと何度も記述するのが面倒くさいですよね? そのためにimport文を使用して、「自パッケージ外のクラスについては、ここから探してね」とコンパイラに指示していることになります。
その他の回答 (3)
- sasadora
- ベストアンサー率68% (59/86)
ごめんなさい。私の経験的には、No3で書いたとおりなんですが、 厳密にはちょっと違うようです。 ちゃんとした定義は、Java言語仕様で確認したほうがよいです。 紹介するURLは、Java言語仕様の日本語訳です。 これによると、名前なしパッケージは、1つ以上存在することもあって、 どの名前なしパッケージを使うかはホストシステムによって決まるそうです。 一時的な開発時などに、名前なしパッケージを使うことを勧めているので、 「名前なしパッケージは常にインポートされている」という考え方は、 間違っていたと思います。 (経験的にはいつもひとつのパッケージしか使われないように思いましたが)
お礼
有難うございました!! これからもよろしくお願いします。 紹介していただいたURLでも勉強してみます。
- sasadora
- ベストアンサー率68% (59/86)
パッケージ名を指定していないクラスは、 「名前なしパッケージ」に属していると言えます。 一般的には、名前なしパッケージは一番上階層のパッケージだと思っていいと思います。 コンパイルした場合は、出力ディレクトリのルートに作成されます。 じゃあ、コンパイラはどうやってパッケージ名のついていないクラスを見つけ出すのか? →名前なしパッケージは常にインポートされていると考えていいと思います。
- a-kuma
- ベストアンサー率50% (1122/2211)
package は、そのファイルに記述されているクラスが、どのパッケージに属するか、の宣言です。 import は、使おうと思っているクラスの(パッケージを含めた)宣言です。 「明確に使い分けないといけない」もなにも、意味が違います。 ■クラス CCC のソース package aaa.bbb; // クラス CCC を使うときには、import aaa.bbb.CCC って使ってね class CCC { ■クラス CCC を使っているソース import aaa.bbb.CCC; class XXX { # 伝わりますか?
補足
有り難うございます。だからpackageは絶対一つだったんですね!目から鱗でした。 でも、補足で教えてください。package文がないソースってありますよね。どうなるのですか?自分のいるクラスがどのpackageか分からないですよね?よろしくお願いします。