Ошибка пакета импорта в java и неоднозначность имени класса

Я изучаю пакеты на java, но столкнулся с некоторыми ошибками.

у меня есть три java файла ...

Первый: ClassAA.java-

package Mypack;
public class ClassAA{
public ClassAA()
{
    System.out.println("class A's constructor is called.");
}
public void testA()
{
    System.out.println("class A's methos is called");
}
}

второй: ClassBB.java-

package Mypack;
public class ClassBB{
public ClassBB()
{
    System.out.println("class B's constructor is called.");
}
public void testB()
{
    System.out.println("class B's methos is called");
}
}

И третий - основной класс PackageDemo.java-

import Mypack.*;
class PackageDemo
{
public static void main(String args[])
{
    ClassAA a1 = new ClassAA();
    a1.testA();
    ClassBB b1 = new ClassBB();
    b1.testB();
}
}

теперь я хочу импортировать пакет Mypack, используя import Mypack. * в основном классе, но показывает ошибку -

PackageDemo.java:6: error: cannot access ClassAA
            ClassAA a1 = new ClassAA();
            ^
bad source file: .\ClassAA.java
file does not contain class ClassAA
Please remove or make sure it appears in the correct subdirectory of the sourcepath.
1 error

Я нашел два решения этой проблемы.

первый-

поместите файлы ClassAA.java и ClassBB.java в пакет Mypack. если я это сделаю, это будет работать, но я не думаю, что Java заставляет нас это делать (я не уверен).

Второй (я нашел это решение в stackoverflow) -

Переименуйте файлы ClassAA.java и ClassBB.java, потому что компилятор java путается с именем. (вот почему он выдает ошибку, плохой файл и т. д.) но если я переименую эти два файла, это покажет мне еще одну ошибку.

 error: class ClassAA is public, should be declared in a file named ClassAA.java
public class ClassAA{
   ^
1 error

Итак, что мне делать, пожалуйста, помогите мне. я хочу импортировать пакет, используя import. *.

Как видите, ваше второе решение вовсе не решение. Дерево каталогов должно соответствовать дереву пакетов. Это так просто. Обратите внимание, что в соглашении об именах пакетов используются все строчные буквы. Значит, это должен быть mypack, а не Mypack.

JB Nizet 08.04.2018 12:03

Итак, какие изменения я должен внести, чтобы эта программа не содержала ошибок. он работает с другим случаем, но проблема возникает, когда я импортирую пакет с помощью Mypack. *; программа работает с импортом Mypack.ClassAA;

Hemant 08.04.2018 14:10

Опять же, дерево пакетов должно соответствовать дереву каталогов. Итак, класс mypack.ClassAA должен находиться в файле mypack / ClassAA.java. И класс mypack.ClassBB должен быть в файле mypack / ClassBB.java

JB Nizet 08.04.2018 14:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
126
0

Другие вопросы по теме