尝试编译实现接口的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 

有用

祝一切顺利