private
– доступ только непосредственно из этого класса и его внутренних/вложенных классов.- package-private – доступ из всех классов этого пакета. Наследники доступа не имеют. Применяется когда модификатор не указан.
protected
– доступ из всех классов этого пакета и всех наследников.public
– никаких ограничений доступа.
Модификаторы доступа применяются к классам, интерфейсам, методам и полям. Они нужны для реализации принципа наименьших привилегий и для отделения внутренней реализации от частей публичного API.
Вопросу посвящен Effective Java Item 13 и глава 6.6 спецификации.