Открытые и защищенные члены являются частью экспортируемых вами классов API. Частные и так называемые частные уровни доступа к пакету являются частью внутренней реализации.
По умолчанию следует использовать минимально возможный уровень доступа - частный, за которым следует частный пакет - если только у вас нет веских причин не делать этого. Я заметил, что некоторые разработчики используют защищенные по умолчанию. Это не рекомендуется, так как защищенный является частью API, который классы во внешних пакетах могут использовать, если они могут расширить ваш класс. Если вы не ожидали / планируете расширить класс, это может привести к нежелательным побочным эффектам.
См. Эффективная Java, 2-е изд. для лучшего объяснения:
Пункт 13: Минимизировать доступность классов и членов
Пункт 17: Дизайн и документ для наследования или иначе запретить
Цитата:
"Единственный самый важный фактор, который отличает хорошо спроектированный модуль от
плохо продуманным является степень, до которой модуль скрывает свои внутренние данные и
другие детали реализации из других модулей. "