尝试编译实现接口的java文件时“找不到符号”
我正在尝试编译一个实现接口TmpInter
的类Tmp
。
/* Interface */ package test; public interface TmpInter { public void show(String s); } /* Class */ package test; public class Tmp extends TmpInter { public void show(String s) { System.out.println("hello"); } }
现在,当我尝试编译类Tmp.java
我收到了错误
D:\java\rmi\Hello>javac TmpInter.jav D:\java\rmi\Hello>javac Tmp.java Tmp.java:3: cannot find symbol symbol: class TmpInter public class Tmp extends TmpInter ^
我经历了所有类似的post并尝试了这些解决方案,但是徒劳无功。
我正在保存并运行同一目录中的两个文件,并且在同一文件夹中生成.class
文件。 我也尝试了-classpath
选项但是没有用。 我在Eclipse中尝试从windows cmd编译这些文件时工作正常。 此外,我尝试使用javac *.java
一次编译该文件夹中的所有文件。这生成了所有必需的.class
文件,没有任何错误,但我无法弄清楚为什么在单独编译时不是这样。
除了Binyamin所说的,请确保当前目录位于类路径中。 尝试编译如下:
javac -cp . test\Tmp.java
(从包含test
包目录的目录运行此命令)。
-cp
选项设置类路径。 .
表示“当前目录”。 通常,如果未设置CLASSPATH
环境变量,则当前目录将自动位于类路径中。 但是,如果您已设置CLASSPATH
并且未明确添加当前目录,则无法正常工作。
TmpInter是界面。 您无法将接口扩展到类。 接口可以实现到类。
public class Tmp implements TmpInter
声明类
在Hello文件夹中创建子文件夹(test)。 之后将那些接口和类放入test子文件夹中。 然后,编译代码。
D:\java\rmi\Hello\test>javac Tmp.java
你应该实现接口,而不是扩展它。
public class Tmp implements TmpInter
另外,请查看inteface的Java教程 。
我试过做javac -d . filename.java
javac -d . filename.java
在同一路径D:\java\rmi\Hello
生成了所需的输出,即每个文件的.class是在上面提到的包中单独生成的。
对于接口这样做
D:\java\rmi\Hello>javac test\TmpInter.java
然后试试
D:\java\rmi\Hello>javac test\Tmp.java
有用
祝一切顺利