Главная » Java » Истинное значение protected

0

Ранее мы кратко упомянули о том, что объявление члена класса защищенным (то есть с ключевым словом protected) означает возможность обращения к нему из классов, расширяющих данный, — однако этому замечанию не хватает формальной четкости. Выражаясь более точно, к защищенному члену класса можно обращаться через ссылку на объект, относящийся по меньшей мере к тому же типу, что и класс. Пример поможет нам разобраться с этим утверждением. Предположим, имеется следующая иерархия классов:

Поле calories в классе Dessert является защищенным. Каждый класс, расширяющий Dessert, наследует от него поле calories. Тем не менее код класса Cake может осуществлять доступ к полю calories только через ссылку на тип, являющийся Cake или его подклассом (например, тип Chocolate Cake). Код класса Cake не может обращаться к полю calories через ссылку типа Scone. Такое ограничение позволяет быть уверенным в

том, что доступ к protected-полям  осуществляется лишь в пределах иерархии класса. Если

в коде класса Cake имеется ссылка на более общий объект Dessert, вы не можете применять ее для доступа к полю calories, однако вы можете преобразовать ее в ссылку на Cake и воспользоваться  результатом — при условии, конечно, что объект, на который она указывает, действительно относится к классу Cake (по меньшей мере).

Сказанное справедливо и по отношению к защищенным методам — их можно вызывать только через ссылку на тип, относящийся по меньшей мере к тому же классу.

К защищенным статическим полям и методам можно обращаться из любого расширенного класса. Если бы поле calories было статическим, то любой метод (как статический, так и нет) в Cake, ChocolateCake и Scone мог бы обращаться к нему через ссылку на любой из типов Dessert.

Члены класса, объявленные с ключевым словом protected, также оказываются

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

Источник: Арнольд К., Гослинг Д. – Язык программирования Java (1997)

По теме:

  • Комментарии