Ну, для чего мы делаем приватные методы? Чтобы их можно было использовать только внутри экземпляра. Для чего это делается, если можно написать код, где все паблик, и он будет работать? Чтобы формально отделить те методы(код), что предполагают использование другими объектами(внешние интерфейсы) и те методы(код) использование которого извне не предусмотрено и может что-то сломать. С протектед, если не ошибаюсь, похожая история, только про наследование.
Ну, это мое понимание и я могу ошибаться. С удовольствием услышу "хороший ответ" =)