В языке C++ определены три модификатора доступа: private, protected и public. Язык Java обладает тем же набором модификаторов, но расширенным модификатором friendly. Однако все эти модификаторы ведут себя несколько по-другому, в основном из-за того, что в семантику Java были введены новые модули - упаковки (packages). Модификаторы доступа стали контекстно-зависимыми, т. е. зависят от того, размещается ли класс, к которому производится доступ, в одной упаковке с вызывающим его классом или нет.
Модификатор рublic. Любой класс может обратиться к данным и методам другого класса из любого компьютера сети, если он имеет этот модификатор доступа. Объявление компонент-данных класса с модификатором public нарушает принцип инкапсуляции.
Модификатор рrotected, позволяет обращаться к данным и методам класса лишь самому классу, классам, хранящимся в этом же пакете, и унаследованным классам того же пакета. Обычно такой модификатор применяют для того, чтобы закрыть доступ к данным и методам для тех классов, которые не состоят в "родственных отношениях" с защищаемым классом. Обратите внимание на то, что в Java классы считаются родственными, не только при наследовании, но и одного пакета.
Модификатор рrivate запрещает доступ к его компоненте методам не являющимся методами класса в котором эта компонента объявлена. Доступ к ней возможен только из методов этого класса. При отсутствии наследования правильнее использовать модификатор private, а не protected.
Модификатор friendly. В Java существует еще один модификатор доступа - friendly. Этот модификатор не пишется явно, но подразумевается, если не указан никакой другой модификатор доступа. При использовании friendly к данным может обратиться любой класс и метод пакета, в котором содержится класс.