Я реализую следующий пример интерфейса:
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
Как мой интерфейс, так и класс находятся в одной директории, почему вы не можете найти ошибку символа?
Изменение: Как было предложено, изменили пакет и снова попытались запустить тот же код. Все еще получаю сообщение об ошибке.
Проблема в том, что при компиляции вы находитесь в неправильной папке. На скриншоте консоли видно, что вы находитесь внутри /test1
. Однако package test1;
оператор ожидает папку внутри текущей папки с именем test1
. Он не может найти эту папку/пакет, поэтому вы получите сообщение об ошибке.
Решение состоит в том, чтобы перейти в одну папку, чтобы вы попали в /src
, а затем скомпилировали, используя путь к файлу, например javac test1/Car.java
. Объяснение: Вы находитесь в папке /src
, оператор package
внутри классов говорит, что они находятся внутри папки test1
которая находится внутри /src
. Теперь каждый пакет/путь может быть разрешен.
И вы не должны import
вещи, которые находятся в одном пакете.
Прежде всего, поскольку ваше имя пакета является 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
Вы входите в точный путь с помощью команды cd
Поскольку этот интерфейс недоступен, поскольку класс попытается найти его из пакета из текущего/текущего местоположения.
Для компиляции вы должны полностью указать (снова полно) квалифицированное имя пакета во время компиляции.
Например
Если ваш класс в пакете abtest
компилирует его так
javac a/b/test/Car.java
Сначала скомпилируйте 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
также устранит проблему.
package
)?