2017-01-13 4 views
2

次のクラスを使用してcompile.batファイルを作成しようとしています:HumanTest(main method)、Man、Food。以下は、3つのクラスのコードです。この状況では、Foodはすでにコンパイルされており、そのための.javaファイルはありません。 compile.batで-classpathをbatファイルに設定する

package human.man; 

public class Man { 

    private String name; 
    private Food f; 

    public Man(String name, Food f) { 
     this.name = name; 
     this.f = f; 
    } 
} 

public class Food { 
    private String foodName; 

    public Food(String name) { 
     foodName = name; 
    } 
} 

import human.man.*; 
public class HumanTest { 
    public static void main (String[] args) { 
     Food f = new Food("ckt"); 
     Man m = new Man("joe", f); 
    } 
} 

、私は次のコード javac -cp classes;src HumanTest.java を実行します。しかし、私は食品のクラスが見つからないというエラーが発生します。なぜ私はすでにFood.classのクラスパスを設定していますが、これはなぜそうなのでしょうか?ファイルのリンクは次のとおりです:https://www.dropbox.com/s/2wussnm55tbnh3t/Question.zip?dl=0

EDIT: 以下は、私が間違って描いたかどうか教えてください。

--Question 
    |--compile.bat 
    |--HumanTest.java 
    |--classes 
    |--Food.class 
    |--src 
    |--human 
     |--man 
      |--Man.java 
+0

あなたが使用しているディレクトリと '.java'ファイルと' .class'ファイルがどこにあるのかをダイアグラムできますか? –

+0

それを瓶に入れて、多分?とにかく.classファイルを配布するのは誰ですか? – ossobuko

答えて

0

この問題は、バッチファイルとは関係なく、純粋にクラスの組織に関連しています。名前付きパッケージからデフォルトパッケージをインポートすることも、名前付きパッケージに含まれるクラスからデフォルトパッケージに含まれるクラスを使用することもできません。

class human.man.Manでは、デフォルトのパッケージにあるFoodクラスを使用しようとしています。代わりに名前付きパッケージにFoodを移動してみてください。

+0

編集するFood.javaファイルがない場合は、これをまったくコンパイルできないことを意味しますか? – timothyjoseph

+0

クラスをコンパイルすることはできますが、クラスがそれ自体がデフォルトの名前空間にある場合に限ります。このため、デフォルトの名前空間を使用することはお勧めできません。 Food.classを書いた人は、自分のクラスを使いたい場合は、クラスをデフォルトの名前空間に置くようにしています。どちらがいいか分からない。 –

関連する問題