Идея заключается в том, что при проектировании библиотеки только те классы, которые предназначены для использования извне (клиентами вашей библиотеки), должны быть общедоступными. Таким образом, вы можете скрыть классы, которые
- Вероятно, изменится в будущих выпусках (если бы они были общедоступными, вы бы взломали код клиента)
- бесполезны для клиента и могут вызвать путаницу
- Не безопасны (поэтому неправильное использование может очень сильно сломать вашу библиотеку)
и т.д.
Если вы разрабатываете собственные решения, то использование внутренних элементов не так важно, я думаю, потому что обычно клиенты будут иметь постоянный контакт с вами и / или доступ к коду. Они довольно важны для разработчиков библиотек.