【问题标题】:Interface Implementation error : cannot find symbol接口实现错误:找不到符号
【发布时间】:2014-07-02 05:50:54
【问题描述】:

我正在实现以下示例接口:

package test1;
    public interface MotorVehicle {
        void run();    
        int getFuel();
    }

在课堂上

package test1;
import test1.MotorVehicle;
public class Car implements MotorVehicle
{
    int fuel;

    public void run(){
        System.out.println("Running");
    }
    public int getFuel(){
        return this.fuel;
    }
}

当我尝试编译类文件时,出现以下错误:

Car.java:4: error: cannot find symbol
public class Car implements MotorVehicle
                            ^
  symbol: class MotorVehicle
1 error

编译步骤:

步骤:1 javac MotorVehicle.java 步骤:2 javac Car.java

我的接口和类都在同一个目录下,为什么ut会出现cannot find symbol错误?

编辑: 按照建议,已更改包,并尝试再次运行相同的代码。仍然出现错误。

【问题讨论】:

  • 你是如何编译它的?任何包中的类(它们是否有package 声明)?
  • 您是否将您的目录添加到类路径中?您使用哪个 IDE?
  • @Dibya 它与错误无关。
  • import接口了吗?您是否声明它们在同一个包中?如果您都没有这样做,我不明白为什么应该编译。
  • 两个类都在“test”文件夹中吗?这就是package 信息所说的。如果此信息与实际情况不一致,可能会出现错误。

标签: java interface


【解决方案1】:

问题是编译时你在错误的文件夹中。 从控制台屏幕截图中,很明显您在/test1 内。但是,package test1; 语句需要在当前文件夹内有一个名为 test1 的文件夹。它找不到那个文件夹/包,所以你得到一个错误。

解决方案是上一个文件夹,所以你最终在/src,然后使用文件的路径进行编译,例如javac test1/Car.java。说明:您在文件夹/src 中,类中的package 语句表示它们在文件夹test1 中,该文件夹在/src 中。现在可以解析每个包/路径。

而且你不应该import 同一个包中的东西。

【讨论】:

  • 感谢您的解释。现在把整个事情弄清楚了。在执行您的建议后,现在编译很好。我喜欢你解释的简单语言,因此接受了答案
【解决方案2】:

首先,因为你的包名是test,你必须将你的类和接口保存在一个名为test的文件夹中。

第二件事,因为它们位于名为 test 的同一文件夹中,从类定义中删除 import test.MotorVehicle;

假设如果您的文件夹 test 位于 g:/ 中,那么 g:/test/包含类和接口。

然后尝试在g:/中打开命令提示符

然后键入以下命令

用于编译

javac test/Car.java

用于执行

 java test.Car

虽然你可能会得到Error: Main method not found in class test.Car 因为你的课程不包含主要数学

【讨论】:

  • 他没有尝试运行并且 Car 没有 main 方法
【解决方案3】:

您将通过使用cd 命令进入确切的路径。因为该接口不可访问,因为类将尝试从当前/运行位置的包中找到它。

为了使这个编译你必须在编译期间指定完全(再次完全)包的限定名称。

举例

如果你的类在a.b.test 像这样编译它

javac a/b/test/Car.java

【讨论】:

    【解决方案4】:

    首先编译MotorVehicle,因为它没有任何依赖。然后设置类路径

    在发出javac Car.java编译语句之前你需要设置Classpath

    窗户

    set CLASSPATH=%CLASSPATH%;<PATH_TO_COMPILED_BINARY>/
    

    Unix

    export CLASSPATH=$CLASSPATH:<PATH_TO_COMPILED_BINARY>/
    

    &lt;PATH_TO_COMPILED_BINARY&gt; 不应包含包test1

    例子:

    C:/sourcecode/test1

    那么&lt;PATH_TO_COMPILED_BINARY&gt;应该是C:/sourcecode

    更新

    删除import test1.MotorVehicle 也将解决此问题。

    【讨论】:

    • javac 工作正常,因为我能够成功编译其他 java 文件。是否仍然需要设置类路径?
    • 是的,编译car之前需要设置classpath指向包test。
    • @SotiriosDelimanolis 我不是在谈论源代码,而是在谈论编译的 .class 文件。很抱歉造成误解,请看编辑。
    【解决方案5】:

    编译后Motovehicle.java。您必须创建一个文件夹 test1 并将 MotorVehicle.class 转移到文件夹 test1 中,然后编译下一个文件汽车.java。这将解决您的错误

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 2010-12-03
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多