Ci sono situazioni specifiche e limitate in cui la visibilità del campo ha un impatto. Sto parlando di applet Java . Un'applet Java senza firma può solo eseguire interazioni di sistema limitate (nessun accesso ai file locali, nessuna connessione a server esterni eccetto quello che ha servito il codice dell'applet e così via). Queste restrizioni sono applicate attraverso un complesso framework di "permessi" che è implementato ... nel codice Java della libreria standard.
Se un'applet può accedere a campi privati di oggetti Java arbitrari da altri pacchetti, allora potrebbe interferire con gli oggetti e le tabelle che definiscono le autorizzazioni correnti per l'applet stessa. In effetti, il diritto di utilizzare l'API reflection su tutte le classi (incluse le classi di sistema) concede tecnicamente tutti i diritti sull'applet.
Questo non significa che le parole chiave di visibilità del campo come private
o protected
siano una funzionalità di sicurezza; significa che i progettisti di Sun / Oracle hanno utilizzato la visibilità sul campo per implementare e supportare un framework di sicurezza (e, a mio parere, avrebbero dovuto farlo diversamente, perché farlo in questo modo è come cercare di mantenere una lista nera di "chiamate pericolose" "su migliaia di possibili chiamate, ed è un lavoro molto duro, e l'apparizione ricorrente di exploit Java 0-day è una testimonianza della durezza di un simile approccio).
Per la maggior parte delle altre situazioni, i campi oggetto dovrebbero essere resi privati perché promuovono migliori pratiche di ingegneria del software, rendendo il codice che è più facile da mantenere (come tutte le regole, che ha eccezioni; occasionalmente , campo pubblico è un'idea migliore). Qui non c'è nulla su security ; si tratta di usabilità e manutenibilità .