La domanda è al contrario.
Non cerchi un motivo per rendere una funzione non pubblica. È una mentalità errata per cominciare (secondo me). Il ragionamento dovrebbe andare dall'altra parte.
In altre parole, non chiedere "perché dovrei renderlo privato?". Chiedi: "perché dovrei renderlo pubblico?"
In caso di dubbio, non esporlo. È un po 'come il rasoio di Ockham: non moltiplicare le entità oltre la necessità.
EDIT: affrontare i controargomenti sollevati da @Telastyn nei commenti (per evitare discussioni approfondite lì):
L'ho sentito nel tempo, e l'ho persino sposato per un bel po 'di tempo, ma nella mia esperienza, le cose tendono ad essere troppo private.
Sì, a volte è una seccatura se una classe è aperta per eredità, ma non è possibile ignorare alcuni metodi privati (il cui comportamento si desidera modificare).
Ma protected
basterebbe - ed è ancora non pubblico.
Porta a un sacco di duplicazione del codice e sovraccarico per arrivare a "cose che non dovrebbero essere pubbliche", ma sono comunque accessibili indirettamente.
Se diventa problematico, allora semplicemente renderlo pubblico! C'è la necessità di cui stavo parlando :)
Il mio punto è che non dovresti farlo per ogni evenienza (YAGNI e tutti).
Nota che è sempre più facile rendere pubblica una funzione privata piuttosto che riportarla alla privacy. È probabile che quest'ultimo rompa il codice esistente.