Что означает защищенный модификатор?
Я читаю книгу Язык программирования Java, 3-е издание.
В главе 3.5 он иллюстрирует модификатор protected
следующими словами:
Точнее, помимо доступности в самом классе и для кодирования внутри тот же пакет, защищенный член также может быть доступен из класса через ссылки на объекты которые имеют, по меньшей мере, тот же тип, что и класс, который является ссылкой на тип класса или один из его подтипов.
Слова меня смущают, в двух аспектах:
1. защищенный член может получить доступ по коду внутри одного пакета? То, что я знал раньше, является защищенным членом, доступ к которому может получить только подкласс...
2. Я не понимаю, что означает a protected member can also be accessed from ...
, кто-нибудь может объяснить мне, пожалуйста?
Ответы
Ответ 1
-
Да, члены protected
могут быть доступны из самого класса, подклассов класса, а также всех классов в одном пакете этого класса (неважно, являются ли они подклассами или нет). Если раньше вы не знали эту последнюю часть, то вы только что узнали что-то новое.
-
Это просто означает, что вы можете использовать этих членов; если член недоступен, значит, вы получите ошибку компилятора при попытке использовать его.
Ответ 2
В Java protected
означает, что к элементу можно получить доступ любым классом в том же пакете и подклассами, даже если они находятся в других пакетах.
Примечание
A protected variable is not visible outside the package
например B продолжается A, а A имеет защищенный int x; его можно использовать в классе B. Но не может быть доступ с использованием его переменной экземпляра
Ответ 3
1) Да, защищенные члены могут быть доступны классами из одного и того же пакета. То, как работает Java.
2) Это означает, что подклассы могут получить к ним доступ.
Ответ 4
Я не понимаю, к чему может получить доступ защищенный член... значит, кто-нибудь может объяснить мне, пожалуйста?
Например, у вас есть объект A и объект B, оба из одного класса. Объект A сможет запросить защищенные свойства и методы объекта B, если он имеет ссылку на него. Защищенный модификатор принудительно применяется на уровне класса, а не на уровне объекта. Это может пригодиться в некоторых ситуациях.
Ответ 5
Вот ответы
-
Да. Доступ к защищенным членам (переменные и методы экземпляра) класса могут выполняться другими классами внутри одного и того же пакета, а также любым другим классом, который расширяет этот класс, содержащий член для доступа. В той же спецификации они также указали таблицу, в которой уровень доступа строго возрастает, обеспечивая доступ всех разрешений на предыдущем уровне: private → package → protected → public
-
Как защищенные члены (переменные-экземпляры/состояния и методы/поведение) класса X наследуются и видны как часть подклассов X, например Y1, Y2, Y3, и могут быть далее до следующего уровни, любые ссылки на объекты типа X или Y1, Y2, y3 могут использоваться для доступа к этому защищенному члену.
Ответ 6
Просто подумайте об этом как между публичным, так и частным. Вы можете получить доступ ко всем из общедоступных классов и меньше от частных классов.