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

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

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

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