• ベストアンサー

packageとimport の違いって?

packegeって、クラスやインタフェースの集まりなんですよね?で、import文で参照できるようにするんですよね?でも、package~ってソースの冒頭に書く事ってありますよね。でもその後にもimport~って続いて・・・何かpackage~とimport~って明確に使い分けないといけない理由があるのでしょうか?教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sasadora
  • ベストアンサー率68% (59/86)
回答No.2

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文を使用して、「自パッケージ外のクラスについては、ここから探してね」とコンパイラに指示していることになります。

kohiro
質問者

補足

有り難うございます。だからpackageは絶対一つだったんですね!目から鱗でした。 でも、補足で教えてください。package文がないソースってありますよね。どうなるのですか?自分のいるクラスがどのpackageか分からないですよね?よろしくお願いします。

その他の回答 (3)

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.4

ごめんなさい。私の経験的には、No3で書いたとおりなんですが、 厳密にはちょっと違うようです。 ちゃんとした定義は、Java言語仕様で確認したほうがよいです。 紹介するURLは、Java言語仕様の日本語訳です。 これによると、名前なしパッケージは、1つ以上存在することもあって、 どの名前なしパッケージを使うかはホストシステムによって決まるそうです。 一時的な開発時などに、名前なしパッケージを使うことを勧めているので、 「名前なしパッケージは常にインポートされている」という考え方は、 間違っていたと思います。 (経験的にはいつもひとつのパッケージしか使われないように思いましたが)

参考URL:
http://www.y-adagio.com/public/standards/tr_javalang/7.doc.htm#26619
kohiro
質問者

お礼

有難うございました!! これからもよろしくお願いします。 紹介していただいたURLでも勉強してみます。

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.3

パッケージ名を指定していないクラスは、 「名前なしパッケージ」に属していると言えます。 一般的には、名前なしパッケージは一番上階層のパッケージだと思っていいと思います。 コンパイルした場合は、出力ディレクトリのルートに作成されます。 じゃあ、コンパイラはどうやってパッケージ名のついていないクラスを見つけ出すのか? →名前なしパッケージは常にインポートされていると考えていいと思います。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

package は、そのファイルに記述されているクラスが、どのパッケージに属するか、の宣言です。 import は、使おうと思っているクラスの(パッケージを含めた)宣言です。 「明確に使い分けないといけない」もなにも、意味が違います。 ■クラス CCC のソース package aaa.bbb; // クラス CCC を使うときには、import aaa.bbb.CCC って使ってね class CCC { ■クラス CCC を使っているソース import aaa.bbb.CCC; class XXX { # 伝わりますか?

関連するQ&A