La pregunta es al revés.
No busca una razón para hacer que una función no sea pública. Para empezar, es una mentalidad incorrecta (en mi opinión). El razonamiento debe ser al revés.
En otras palabras, no pregunte "¿por qué lo haría privado?". Pregunte: "¿por qué debería hacerlo público?"
En caso de duda, no lo exponga. Es algo así como la navaja de afeitar de Ockham: no multiplique los derechos más allá de la necesidad.
EDITAR: Abordar los argumentos en contra presentados por @Telastyn en los comentarios (para evitar una discusión extendida allí):
Lo escuché con el tiempo, e incluso lo defendí durante bastante tiempo, pero en mi experiencia, las cosas tienden a ser demasiado privadas.
Sí, a veces es una molestia si una clase está abierta a la herencia, pero no puede anular algunos métodos privados (cuyo comportamiento le gustaría modificar).
Pero protected
sería suficiente, y todavía no es público.
Conduce a una gran cantidad de duplicación de código y gastos generales para llegar a "cosas que no deberían ser públicas" pero que de todas formas se acceden indirectamente.
Si se vuelve problemático, ¡simplemente hazlo público! Existe la necesidad de la que estaba hablando :)
Mi punto es que no deberías hacerlo por si acaso (YAGNI y todo).
Tenga en cuenta que siempre es más fácil hacer pública una función privada que devolverla a la privacidad. Es probable que este último rompa el código existente.