Пять уроков по Java


Модификаторы доступа


В языке C++ определены три модификатора доступа: private, protected и public. Язык Java обладает тем же набором модификаторов, но расширенным модификатором friendly. Однако все эти модификаторы ведут себя несколько по-другому, в основном из-за того, что в семантику Java были введены новые модули - упаковки (packages), о которых мы уже говорили. Каждая упаковка содержит в себе набор классов и интерфейсов для выполнения какой-либо определенной задачи. Так, например, упаковка java.applet отвечает за работу аплетов, что явствует из ее названия. Соответственно упаковка java.io хранит в себе все необходимое для выполнения операций ввода-вывода и т. д. Модификаторы доступа стали контекстно-чувствительными, т. е. зависят от того, размещается ли класс, к которому производится доступ, в одной упаковке с вызывающим его классом или нет.

В таблице отражена возможность доступа к данным из того или иного класса. Расшифруем теперь то, что здесь изображено. В первом столбце приводятся модификаторы доступа данных и методов, к которым производится обращение. Столбец "Класс" говорит нам, что сам класс имеет право обращаться к своим данным и методам независимо от того, какой модификатор доступа им присвоен. Следующий столбец "Наследник" объясняет, что класс-наследник может обращаться к данным и методам своего предка, исключительно если они имеют спецификатор доступа protected или public, причем в случае protected оговаривается, что доступ к методам и данным protected класса предка возможен, лишь если класс-наследник располагается с ним в той же самой упаковке, в противном случае компилятор не позволит вам доступ. Столбец "Упаковка" говорит о том, что все классы, располагающиеся в одной и той же упаковке, могут обращаться к данным и методам друг друга, если только они не объявлены как private. При этом совершенно не имеет значения иерархия наследования. И последний столбец показывает, что классы, расположенные на одной машине сети, могут обращаться лишь к общедоступным данным и методам, размещенным на другой сетевой машине. Ну а теперь несколько подробнее о каждом из модификаторов.



Содержание раздела