Public члены класса A доступны для всех и каждого.
Защищенные члены класса A не доступны вне кода A, но доступны из кода любого класса, производного от A.
Закрытые члены класса A недоступны вне кода A или из кода любого класса, полученного из A.
Итак, в конце концов, выбор между защищенным или частным ответит на следующие вопросы: Какое доверие вы готовы оказать программисту производного класса?
По умолчанию , предположим, что производному классу нельзя доверять, и сделает ваших членов приватными . Если у вас есть очень веская причина предоставить свободный доступ внутренним классам материнского класса к производным классам, вы можете сделать их защищенными.