2016-03-30 10 views
0
package A; 

    public class A { 


    } 

package B; 

import A.*; 

public class B { 

    public A a; 
} 

import B.*; 

public class Main { 

    public static void main(String[] args) { 

     Object obj = new B().a; 
    } 

} 

なぜ私は主にクラスAをインポートする必要はありませんか?それはある時点でメインで使われています!メインでAをインポートする必要があるのはなぜですか?

輸入指令がどのように正確に機能するか教えていただけますか?

答えて

6

Mainでは実際には使用されていません。 Mainは、Aというクラス、そのメソッド、またはそのフィールドのいずれかを参照しません。コンパイラは、Aと入力したが実際にはA.Aを意味することは決してありません。これはすべてのインポートが対象です。 new B().aAを返すかもしれませんが、MainはすぐにそしてObjectに暗黙的にキャストされるので気にしません。

1

曖昧さを取り除くために輸入品が使用されています。たとえば、あなたのプロジェクトに2 B(firstpackage.Bsecondpackage.B)のクラスを持っていて、のようなものを書いている場合:

B b = new B() 

Javaコンパイラは、それが使用する必要があります(第一または第二のパッケージから)どのクラスを知っている必要があります。 しかし、Bクラスのインスタンスを他のクラスから呼び出すと、すでに定義されており、この場合にはあいまいさはありません。

0

メインクラスはクラスAのオブジェクトを決して使用していないため、インポートはネードされず、クラスBを使用し、BはAを使用するという別のことです。 Javaは依存関係がネストされていないので、コンパイル時にそれを処理します。そうでなければ、メインクラスのmussは、オブジェクトの中で何が使用/必要であるかをすべてインポートします。

+0

実際、Aへの参照はコンパイル時ではなく実行時に解決されます。マイナーポイントだが、言及する価値があると思った。 – ig0774

関連する問題