ошибка импорта пакета в java и двусмысленность имени класса

avatar
Hemant
8 апреля 2018 в 09:28
159
0
0

Я изучаю пакеты в 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 заставляет нас это делать (я не уверен).

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

Переименуйте файлы 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.* .

Источник
JB Nizet
8 апреля 2018 в 10:03
0

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

Hemant
8 апреля 2018 в 12:10
0

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

JB Nizet
8 апреля 2018 в 12:13
0

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

Ответы (0)