Не может наследовать внутри того же пакета в Java

1

Я все еще изучаю Java, и моя проблема в том, что я не могу наследовать внутри одного и того же пакета. * Пожалуйста, подробно объясните заранее

Класс 1 в упаковке:

package Jpak02;

public class PTaccess_modes {
    public int a = 1;
    protected int b = 2;
    int c = 3;
    private int d = 4;

    PTaccess_modes() {
        System.out.println("\nInside PTaccess_mode class in package Jpak02");
        System.out.println("\nPublic int a : " + a);
        System.out.println("\nProtected int b : " + b);
        System.out.println("\nDefault int c : " + c);
        System.out.println("\nPrivate int d : " + d);
    }
}

Класс 2 в той же упаковке:

package Jpak02;

class PTaccess_modes_1 extends PTaccess_modes {
    PTaccess_modes_1() {
        System.out.println("\nInside PTaccess_mode_1 class in package Jpak02");
        System.out.println("\nPublic int a : " + a);
        System.out.println("\nProtected int b : " + b);
        System.out.println("\nDefault int c : " + c);
        System.out.println("\nPrivate int d : " + d);
    }
}

Ошибки компиляции:

      D:\softwareinstall\Java_progs\packages\Jpak02>javac PTaccess_modes_1.java
      PTaccess_modes_1.java:5: error: cannot find symbol
      class PTaccess_modes_1 extends PTaccess_modes
                                ^
        symbol: class PTaccess_modes
      PTaccess_modes_1.java:10: error: cannot find symbol
        System.out.println("\nPublic int a : "+a);
                                          ^
        symbol:   variable a
        location: class PTaccess_modes_1
      PTaccess_modes_1.java:11: error: cannot find symbol
        System.out.println("\nProtected int b : "+b);
                                             ^
        symbol:   variable b
        location: class PTaccess_modes_1
      PTaccess_modes_1.java:12: error: cannot find symbol
        System.out.println("\nDefault int c : "+c);
                                           ^
        symbol:   variable c
        location: class PTaccess_modes_1
      4 errors
Теги:

2 ответа

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

Я только что создал новую папку под названием Jpak02, а затем создал два файла: PTaccess_modes.java и PTaccess_modes_1.java, а затем скопировал содержимое ваших классов в них (никаких изменений, сделанных с вашего текущего заданного кода) и скомпилированный по порядку:

D:\>javac Jpak02\PTaccess_modes.java

D:\>javac Jpak02\PTaccess_modes_1.java

При компиляции второго класса я получил эту (ожидаемую) ошибку:

Jpak02\PTaccess_modes_1.java:9: error: d has private access in PTaccess_modes
        System.out.println("\nPrivate int d : " + d);
                                                  ^
1 error

После этого я удалил файл.class, сгенерированный файлом PTaccess_modes.java, и скомпилировал его снова (на этот раз добавлен комментарий к строке с использованием private d поля private d):

D:\>del Jpak02\PTaccess_modes.class

D:\>javac Jpak02\PTaccess_modes_1.java

И скомпилировал и сгенерировал оба файла.class (как и ожидалось).


Затем, но не в последнюю очередь, я обратился к пакету и скомпилировал класс оттуда:

D:\>cd Jpak02

D:\Jpak02>javac PTaccess_modes_1.java

И теперь у меня возникли проблемы, о которых вы говорили:

PTaccess_modes_1.java:3: error: cannot find symbol
class PTaccess_modes_1 extends PTaccess_modes {
                               ^
  symbol: class PTaccess_modes
PTaccess_modes_1.java:6: error: cannot find symbol
        System.out.println("\nPublic int a : " + a);
                                                 ^
  symbol:   variable a
  location: class PTaccess_modes_1
PTaccess_modes_1.java:7: error: cannot find symbol
        System.out.println("\nProtected int b : " + b);
                                                    ^
  symbol:   variable b
  location: class PTaccess_modes_1
PTaccess_modes_1.java:8: error: cannot find symbol
        System.out.println("\nDefault int c : " + c);
                                                  ^
  symbol:   variable c
  location: class PTaccess_modes_1
4 errors

TL; DR: Обязательно компилируйте классы из нужного места и используя их полное имя, это, включая имя пакета (как показано в первом и втором блоке этого ответа).

  • 0
    хорошо, я сделал компиляцию снова, и те же ошибки приходят, не знаю, почему какие-то проблемы с системой?
  • 0
    Ответ @Amitesh обновлен, чтобы показать, как воспроизвести вашу ошибку и как ее решить.
Показать ещё 3 комментария
0

Вы не можете использовать переменную d в классе, который наследует. Он объявлен как закрытый, что означает, что он может использоваться только в классе, который был объявлен, ни в каком другом месте.

  • 1
    -1 Теперь downvoter: но это единственная ошибка компилятора, которую должен иметь OP (таким образом, учиться / тестировать объявление private полей / методов).
  • 0
    на самом деле, что d: line был прокомментирован мной, возможно, произошла опечатка при публикации вопроса
Показать ещё 2 комментария

Ещё вопросы

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