-2

我有一个类 Car 扩展 Vehicle 并且在包 B 中

车辆在 A 包中

两个文件都在不同的文件夹中

当我编译不在包中的 main 时,它确实很好,但是当我在创建汽车对象后打印汽车对象时,我从车辆继承的每个变量都得到了值 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

要将所有类编译到文件夹 classes,您将使用以下命令(来自 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 回答