Подтвердить что ты не робот

Что означает защищенный модификатор?

Я читаю книгу Язык программирования Java, 3-е издание.

В главе 3.5 он иллюстрирует модификатор protected следующими словами:

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

Слова меня смущают, в двух аспектах:

1. защищенный член может получить доступ по коду внутри одного пакета? То, что я знал раньше, является защищенным членом, доступ к которому может получить только подкласс...

2. Я не понимаю, что означает a protected member can also be accessed from ..., кто-нибудь может объяснить мне, пожалуйста?

4b9b3361

Ответ 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

Просто подумайте об этом как между публичным, так и частным. Вы можете получить доступ ко всем из общедоступных классов и меньше от частных классов.