我有一个界面&它的实现类在同一个包中。我在命令行中使用javac来编译它们。我能够成功编译接口类,但是在编译接口类后尝试编译实现类时,我收到错误 - 找不到符号。但是,作为界面&它的实现是在同一个文件夹中,如果我做一个Javac *。我能够编译它们。
有人可以帮我理解这种行为吗?谢谢你的时间
答案 0 :(得分:5)
Java编译器通过文件名约定查找包,a.b.c.Interface
被解释为查找a/b/c/Interface.class
中的接口
如果从类路径的根目录运行javac,编译器将找到您的接口。即如果您的软件包位于D:\sources\a\b\c
,请在D:\sources
中启动javac并编译a\b\c\Impl.java
答案 1 :(得分:1)
您必须同时编译这两个文件,或者在.class
的类路径中添加第一次运行的javac
文件。 javac
不会尝试智能,也不会在您的硬盘中搜索可能解决丢失符号的文件。如果你没有传递内容,它就找不到它。