В чем разница между разными модификаторами доступа?

  • private – доступ только непосредственно из этого класса и его внутренних/вложенных классов.
  • package-private – доступ из всех классов этого пакета. Наследники доступа не имеют. Применяется когда модификатор не указан.
  • protected – доступ из всех классов этого пакета и всех наследников.
  • public – никаких ограничений доступа.

Модификаторы доступа применяются к классам, интерфейсам, методам и полям. Они нужны для реализации принципа наименьших привилегий и для отделения внутренней реализации от частей публичного API.

Вопросу посвящен Effective Java Item 13 и глава 6.6 спецификации.