Ошибка реализации интерфейса: не удается найти символ

#java #interface

#java #интерфейс

Вопрос:

Я реализую следующий пример интерфейса:

 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 выдает ошибку «не удается найти символ»?

Редактировать: Как и предлагалось, изменили пакет и попытались снова запустить тот же код . По-прежнему выдается ошибка.

введите описание изображения здесь

Комментарии:

1. Как вы пытаетесь его скомпилировать? Есть ли классы в каком-либо пакете (у них есть package объявление)?

2. Вы добавили свой каталог в classpath? Какую IDE o вы используете?

3. @Dibya это не имеет никакого отношения к ошибке.

4. Вы import проверили интерфейс? Вы объявили, что они находятся в одном пакете? Если вы не сделали ни того, ни другого, я не понимаю, почему это должно компилироваться.

5. Находятся ли оба класса внутри папки «test»? Вот что говорится в package информации. Если эта информация не соответствует реальной ситуации, вы можете получить ошибки.

Ответ №1:

Проблема в том, что вы находитесь не в той папке при компиляции. На скриншоте консоли видно, что вы находитесь внутри /test1 . Однако package test1; оператор ожидает папку внутри текущей папки с именем test1 . Он не может найти эту папку / пакет, поэтому вы получаете сообщение об ошибке.

Решение состоит в том, чтобы перейти в одну папку, чтобы вы оказались в /src , затем скомпилировать, используя путь к файлу, например javac test1/Car.java . Объяснение: Вы находитесь в папке /src , package инструкция внутри классов говорит, что они находятся внутри папки, test1 которая находится внутри /src . Теперь каждый пакет / путь может быть разрешен.

И вы не должны import использовать вещи, которые находятся в одном пакете.

Комментарии:

1. Спасибо за объяснение. Теперь все проясняется. Теперь все в порядке, после реализации вашего предложения. Мне понравился простой язык, на котором вы объяснили, поэтому принял ответ

Ответ №2:

Прежде всего, поскольку ваше имя пакета test вы должны сохранить свой класс и интерфейс в папке с именем test .

Второе, поскольку они находятся в одной папке с именем test удалить import test.MotorVehicle; из определения класса

Предположим, что ваша папка test находится в g:/ таком, что g:/test/contains класс и интерфейс.

Затем попробуйте открыть командную строку в g:/

затем введите следующие команды

для компиляции

 javac test/Car.java
  

и для выполнения

  java test.Car
  

Хотя вы можете получить Error: Main method not found in class test.Car
поскольку ваш класс не содержит основного метода

Комментарии:

1. Он не пытается запустить, и у Car нет основного метода

Ответ №3:

Вы переходите к точному пути с помощью cd команды.Из-за этого интерфейс недоступен, поскольку класс попытается найти его из пакета из текущего / запущенного местоположения.

Для выполнения этой компиляции вы должны указать полностью (снова полностью) точное имя пакета во время компиляции.

Например

Если ваш класс находится в a.b.test пакете, скомпилируйте его следующим образом

 javac a/b/test/Car.java
  

Ответ №4:

Сначала скомпилируйте MotorVehicle , поскольку у него нет никаких зависимостей. Затем задайте путь к классу

Перед выдачей javac Car.java инструкций компиляции вам необходимо установить Classpath

Windows

 set CLASSPATH=%CLASSPATH%;<PATH_TO_COMPILED_BINARY>/
  

Unix

 export CLASSPATH=$CLASSPATH:<PATH_TO_COMPILED_BINARY>/
  

<PATH_TO_COMPILED_BINARY> не должен включать пакет test1

Пример :

C:/sourcecode/test1

Тогда <PATH_TO_COMPILED_BINARY> должно быть C:/sourcecode

Обновить

Удаление import test1.MotorVehicle также устранит проблему.

Комментарии:

1. javac работает нормально, так как я могу успешно скомпилировать другие файлы Java. Требуется ли по-прежнему указывать путь к классу?

2. Да, вам нужно установить путь к классу так, чтобы он указывал на тест пакета перед компиляцией car.

3. @SotiriosDelimanolis Я говорю не об исходном коде, а о скомпилированных файлах .class. Извините за недоразумение, пожалуйста, посмотрите на редактирование.

Ответ №5:

После компиляции Motorvehicle.java. вы должны создать папку test1 и перенестиMotorVehicle.class в папку test1 затем скомпилируйте следующий файл Car.java . Это решит вашу ошибку