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

1

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

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

Как мой интерфейс, так и класс находятся в одной директории, почему вы не можете найти ошибку символа?

Изменение: Как было предложено, изменили пакет и снова попытались запустить тот же код. Все еще получаю сообщение об ошибке.

Изображение 174551

  • 0
    Как вы пытаетесь скомпилировать это? Находятся ли классы в каком-либо пакете (у них есть объявление package )?
  • 0
    Вы добавили свой каталог в classpath? Какую IDE вы используете?
Показать ещё 15 комментариев
Теги:
interface

4 ответа

6
Лучший ответ

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

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

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

  • 0
    Спасибо за объяснение. Теперь все проясняется. Сейчас хорошо, после реализации вашего предложения. Мне понравился простой язык, на котором вы объяснили, следовательно, приняли ответ
2

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

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

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

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

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

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

javac test/Car.java

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

 java test.Car

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

  • 0
    Он не пытается бежать, а у машины нет основного метода
1

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

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

Например

Если ваш класс в пакете abtest компилирует его так

javac a/b/test/Car.java
0

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

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

Windows

set CLASSPATH=%CLASSPATH%;<PATH_TO_COMPILED_BINARY>/

Юникс

export CLASSPATH=$CLASSPATH:<PATH_TO_COMPILED_BINARY>/

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

Пример:

C:/Исходный код /​​test1

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

Обновить

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

  • 0
    Javac работает нормально, так как я могу успешно скомпилировать другие файлы Java. Требуется ли установка classpath?
  • 0
    Да, вам нужно установить classpath так, чтобы он указывал на тест пакета перед компиляцией car.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню