Я изучаю Java, используя книгу Java: полный справочник. Я сейчас нахожусь в главе 9 и, таким образом, только что внесен в пакеты. На странице 187 сказано: «Если вы хотите, чтобы элемент отображался вне вашего текущего пакета, но только для классов, которые подклассифицируют ваш класс напрямую, тогда объявите этот элемент защищенным». Я понимаю, что это подкласс, который находится в пакете, например «B», и расширяет класс, который определяется как открытый внутри другого пакета «A», имеющий член с именем «proc», затем для того, чтобы сделать proc доступный во всех подклассах, включая подклассы, определенные за пределами текущего пакета «A», я должен отметить его как защищенный. Теперь посмотрим на моей реализации подкласса, определенного внутри пакета «B»:Невозможно получить доступ к защищенным членам класса из подкласса, определенного в другом пакете
package subapp;
import app.*;
public class Test extends App {
public Test() {
App app = new App();
System.out.println(app.proc); // error
}
}
Я уверен, что все пакеты (в обоих файлах классов) загружены правильно, «прямой» суперкласс испытания и его непараметрированный конструктор, являются общедоступными, proc отмечен как защищенный, а функция main() не имеет проблем. Но я получаю исключение во время выполнения при запуске subapp.Test, в котором говорится, что «proc защитил доступ в/суперклассах /. Я получаю неправильное заявление о книге или само заявление?
[Здесь] (http://stackoverflow.com/a/33627846/276052) является хорошей таблицей, иллюстрирующей основы модификатора доступа «protected». – aioobe