我有一个可以扩展Vehicle的Car类,它位于包B中
车辆在包A中
两个文件都在不同的文件夹中
当我编译main时,它不在包中,它确实很好,但是当我在创建一个car对象后打印一个car对象时,我得到了从车辆继承的每个变量的值。
当我在将文件Car移动到编译后创建的目录后尝试重新编译Car时,我无法编译它。当它在主文件夹中时,我可以编译它出于一些奇怪的原因。
package Car;
import Vehicle.*;
public class Car extends Vehicle
{
<some code>
}
我收到以下错误:
'找不到符号'和'包不存在'
答案 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
请注意,将类放在默认包中是一种不好的做法,应该避免使用。包也应该用小写字母书写。