-2

Vehicle を拡張するクラス Car があり、それはパッケージ B にあります

車両はパッケージ A

両方のファイルは別のフォルダーにあります

パッケージに含まれていないメインをコンパイルすると問題なく実行されますが、作成後に車のオブジェクトを印刷すると、車両から継承されたすべての変数の値が 0 になります。

Car をコンパイル後に作成したディレクトリに Car を移動して再コンパイルしようとすると、コンパイルできません。メインフォルダーにあるとき、奇妙な理由でコンパイルできます。

package Car;

import Vehicle.*;

public class Car extends Vehicle
{
  <some code>
}

次のエラーが表示されます。

「シンボルが見つかりません」および「パッケージが存在しません」

4

2 に答える 2

0

ソースツリーはどのように見えますか? Java のパッケージ名は小文字で始まり、その中のクラスは大文字で始まります。例えば

パッケージ mypkg; クラス MyClass {}

mypkg というフォルダにあり、Java クラスは MyClass.java と呼ばれます。

使用する別のクラスにインポートするには:

mypkg.MyClass をインポートします。

とにかく、とりあえず、次のようなものを設定してみてください。

src/ Vehicle.java Car.java

次に、Vehicle.java を次のように変更します。

public class Vehicle { 
 <your code here>
}

および Car.java:

public class Car extends Vehicle {
 <some code>
}

次にコンパイルします。

于 2013-02-04T08:16:15.493 に答える
0

それは非常に簡単です: フォルダーの階層は、パッケージの階層と正確に一致する必要があります。したがって、src がすべてのソース ファイルがあるフォルダーであると仮定すると、ツリーは次のようになります。

src
  Main.java
  Car
    Car.java
  Vehicle
    Vehicle.java

すべてのクラスをフォルダー クラスにコンパイルするには、次のコマンドを使用します (src ディレクトリから)。

src> javac -d ..\classes Main.java Car\Car.java Vehicle\Vehicle.java

これにより、パッケージ階層を尊重する次のファイルが作成されます。

classes
  Main.class
  Car
    Car.class
  Vehicle
    Vehicle.class

その後、引き続き src ディレクトリからメイン クラスを実行できます。

src> java -cp ..\classes Main

デフォルトのパッケージにクラスを配置することは悪い習慣であり、避けるべきであることに注意してください。パッケージも小文字で記述する必要があります。

于 2013-02-04T08:17:15.240 に答える