2009-08-29 23 views

Respuesta

18

Si tengo una clase java que es el paquete-privada (declarado con "clase", no "public class"), realmente no hay diferencia si los métodos en el interior se declaran público o protegidos o paquete-privada, ¿derecho?

Bueno, tal vez no de inmediato. Pero si luego (o en el futuro) declara una clase 'protegida' o 'pública' que hereda de la clase paquete privado, entonces la visibilidad de los miembros de la clase original importa.

Como señala @kmccoy, declarar la clase como definitiva elimina la posibilidad de subclases.

Pero esto es realmente solo escaparatismo. Si luego decides que realmente necesitas crear subclases, simplemente eliminas el final ... y luego vuelves a la situación donde la elección de los modificadores de acceso sí importa.

IMO, la conclusión es que debe elegir los modificadores más adecuados ... incluso si no es necesario en este momento. Si nada más, su elección de modificadores debe documentar su intención en cuanto a dónde se encuentran los límites de abstracción.

+0

Si la clase es 'clase final SomeClass', entonces ¿importaría la visibilidad del miembro? – kmccoy

+2

Si se elimina el modificador final en alguna refactorización futura :) Recuerde que este es un software, "final" no significa "establecido en piedra nunca para cambiar", es decir, "no puede derivar una clase secundaria de este tipo como está escrito ahora mismo." –

4

Los métodos públicos dentro de una clase de paquete son públicos para las clases en el mismo paquete. Pero, los métodos privados no serán accesibles por clases en el mismo paquete.

Cuestiones relacionadas