アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

この回答への補足

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

補足日時:2002/10/03 13:13
    • good
    • 0

ごめんなさい。

私の経験的には、No3で書いたとおりなんですが、
厳密にはちょっと違うようです。
ちゃんとした定義は、Java言語仕様で確認したほうがよいです。
紹介するURLは、Java言語仕様の日本語訳です。

これによると、名前なしパッケージは、1つ以上存在することもあって、
どの名前なしパッケージを使うかはホストシステムによって決まるそうです。

一時的な開発時などに、名前なしパッケージを使うことを勧めているので、
「名前なしパッケージは常にインポートされている」という考え方は、
間違っていたと思います。
(経験的にはいつもひとつのパッケージしか使われないように思いましたが)

参考URL:http://www.y-adagio.com/public/standards/tr_java …
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/10/03 23:09

パッケージ名を指定していないクラスは、


「名前なしパッケージ」に属していると言えます。
一般的には、名前なしパッケージは一番上階層のパッケージだと思っていいと思います。
コンパイルした場合は、出力ディレクトリのルートに作成されます。

じゃあ、コンパイラはどうやってパッケージ名のついていないクラスを見つけ出すのか?
→名前なしパッケージは常にインポートされていると考えていいと思います。
    • good
    • 0

package は、そのファイルに記述されているクラスが、どのパッケージに属するか、の宣言です。


import は、使おうと思っているクラスの(パッケージを含めた)宣言です。

「明確に使い分けないといけない」もなにも、意味が違います。

■クラス CCC のソース

package aaa.bbb; // クラス CCC を使うときには、import aaa.bbb.CCC って使ってね

class CCC {


■クラス CCC を使っているソース

import aaa.bbb.CCC;

class XXX {


# 伝わりますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!