如何从另一个包中的文件导入包?

时间:2013-02-04 08:05:52

标签: java compilation package

我有一个可以扩展Vehicle的Car类,它位于包B中

车辆在包A中

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

当我编译main时,它不在包中,它确实很好,但是当我在创建一个car对象后打印一个car对象时,我得到了从车辆继承的每个变量的值。

当我在将文件Car移动到编译后创建的目录后尝试重新编译Car时,我无法编译它。当它在主文件夹中时,我可以编译它出于一些奇怪的原因。

package Car;

import Vehicle.*;

public class Car extends Vehicle
{
  <some code>
}

我收到以下错误:

'找不到符号'和'包不存在'

2 个答案:

答案 0 :(得分:0)

你的源代码树是什么样的? java中的包名以小写字母开头,以及以大写字母开头的类。例如

包mypkg; class MyClass {}

将位于名为mypkg的文件夹中,java类将被称为MyClass.java

要在您使用的另一个类中导入它:

导入mypkg.MyClass;

无论如何,暂时尝试设置一下这样的东西:

的src /   Vehicle.java   Car.java

然后更改make Vehicle.java看起来像:

public class Vehicle { 
 <your code here>
}

和Car.java:

public class Car extends Vehicle {
 <some code>
}

然后编译。

答案 1 :(得分: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

请注意,将类放在默认包中是一种不好的做法,应该避免使用。包也应该用小写字母书写。

相关问题