una miembro metodos internas interna hacer ejemplos definicion compuesta como clases clase anidar anidadas anidada java class-design

java - metodos - clases internas miembro



Clase no pública de nivel superior vs clase anidada estática (4)

Anidar una clase (estáticamente en Java) envía un claro mensaje de intención : la clase anidada AHelper solo es relevante y utilizable para admitir una clase. No tiene significado por sí mismo, y esto es inmediatamente obvio.

Me parece que las clases no públicas de nivel superior y las clases anidadas estáticas realizan esencialmente las mismas tareas al crear una clase auxiliar.


A.java

public class A { public static main (String[] args) { AHelper helper = new AHelper(); } } class AHelper {}


A.java

public class A { public static main (String[] args) { A.AHelper helper = new A.AHelper(); } static class AHelper {} }


Aparte de cómo están referenciados, me parece que hay muy poca diferencia entre las dos formas de crear una clase de ayuda. Probablemente se reduce principalmente a la preferencia; ¿Alguien ve algo que me falta? Supongo que algunas personas dirían que es mejor tener una clase por archivo de origen, pero desde mi perspectiva, parece más limpio y más organizado tener una clase de nivel superior no pública en el mismo archivo de origen.


En ninguno de los dos ejemplos tienes una clase por archivo fuente. Pero, en general, se usa una clase anidada estática para indicar que solo se debe usar dentro de su clase A.AHelper (lo que obliga a que se haga referencia como A.AHelper ). Eso no está tan claro si mueves esa clase al nivel superior.

Tutorial del sol :

Agrupación lógica de clases: si una clase es útil solo para otra clase, entonces es lógico incluirla en esa clase y mantenerlas juntas. Anidar tales "clases de ayuda" hace que su paquete sea más ágil.


Una cosa que viene a la mente es el alcance de la clase auxiliar. Una clase anidada tiene acceso a miembros privados de la clase padre. Si el ayudante está en su propio archivo, no disfrutará de dicho acceso, aunque es fácil de manejar con el alcance visible del paquete predeterminado.

Otra consideración es la reutilización del código: es posible que desee que su ayudante ayude a varias clases en su paquete.


Una diferencia es que una clase anidada estática se puede declarar pública. No puede hacer esto para ninguna otra clase en el mismo archivo que la clase primaria, ya que una clase pública de nivel principal debe ser el mismo nombre que el nombre del archivo.

Por lo tanto, podría declarar muchas clases públicas en un archivo, pero solo una de ellas es el nivel principal. Las otras clases anidadas estáticas deberían estar relacionadas con la clase principal o realmente no tiene sentido hacer eso.