eficaz de Java 2ª edición dice
Tema 13: Minimizar la accesibilidad de las clases y los miembros
La regla de oro es simple: hacer cada clase o miembro tan inaccesible como posible. En otras palabras, use el nivel de acceso más bajo posible compatible con el funcionamiento correcto del software que está escribiendo.
Así que si no está seguro de por qué necesita un miembro protegido de la clase (es decir, no necesita que las subclases o clases del mismo paquete tengan acceso al campo), entonces declare que es privado. Si deseas configurarlo desde fuera de la clase, crea un setter público.
Sin embargo, si su miembro es final, protegerlo podría estar bien en algunos casos (es decir, no revela información confidencial).
Un problema potencial de seguridad que me gustaría mencionar es que si tiene una matriz declarada protegida final (incluso pública final), la matriz de referencia es final (no se puede modificar), pero los objetos contenidos en la matriz no son finales (un intruso podría cambiar el contenido de la matriz).
Si sabes C++, usted probablemente sabe que
const int * someMember
es diferente de
int * const someMember
Esta última es igual que la matriz final en java.
La corrección para el agujero de seguridad mencionado es para devolver una copia en profundidad de la matriz o devolverlo como una única lista leer.
[Los campos protegidos en la clase base son malos] (http://stackoverflow.com/questions/3182653/are-protected-members-fields-really-that-bad). – RBT