CLASES ANIDADAS Las clases anidadas son clases definidas dentro de otras clases, por lo que son miembros de las clases que las contienen. Este tipo de clase, a diferencia de las clases externas, que solo pueden ser declaradas como públicas o amigables, las clases anidadas pueden ser declaradas como públicas, amigables, privadas o protegidas. Existen dos tipos: las clases anidadas estáticas y las clases internas. public class ClaseExterna { static class ClaseAnidadaEstatica { } class ClaseInterna { } } CLASE ANIDADA ESTÁTICA Una clase anidada que es declarada estática es simplemente llamada una clase anidada estática. Además, una clase anidada estática no puede acceder directamente a los atributos y métodos de instancia de su clase contenedora, –puede utilizarlos únicamente a través de un objeto. Estos sirven principalmente como organizadores de código. Para acceder a una clase estática se utiliza su clase contenedora: ClaseExterna.ClaseAnidadaEstática De esta manera, para crear un objeto de la clase anidada estática se usa la siguiente sintaxis: ClaseExterna.ClaseAnidadaEstática ClaseExterna.ClaseAnidadaEstática(); nombreObjeto = new CLASE INTERNA Las clases anidadas que no son declaradas como estáticas reciben el nombre de clases internas. Al igual que cualquier otra variable o método de instancia, una clase interna está asociada con un objeto de su clase contenedora, y tiene acceso directo a todos los miembros de dicho objeto, incluso de aquellos que son privados. También, dado que están asociadas con una instancia de un objeto, las clases internas no pueden definir atributos estáticos. Para instanciar un objeto (crear un objeto a partir de la plantilla definida) de una clase interna, primero debemos instanciar a su clase contenedora, para después crear el objeto interno dentro del objeto. Por ejemplo: class ClaseExterna{ class ClaseInterna{ } } class OtraClase{ ClaseExterna objetoExterno = new Clase Externa() ClaseExterna.ClaseInterna objetoInterno = ClaseInterna(); } objetoExterno.new Beneficios de usos de clases internas: 1. Agrupamiento lógico de clases: Si una clase es útil únicamente para otra clase, entonces es lógico incluirla dentro de dicha clase y mantenerlas juntas. Anidar estas “clases auxiliares” hace que su distribución sea más fácil. 2. Incrementa el encapsulamiento: Considera dos clases de alto nivel: A y B, donde B necesita acceder a algunos miembros de A, que de otra manera serían declarados privados. Escondiendo la clase B dentro de A, A puede declarar sus miembros privados, y B conserva su acceso a ellos. Adicionalmente, B misma puede esconderse del resto del mundo. 3. Código más fácil de leer y mantener: Anidando pequeñas clases dentro de clases de alto nivel coloca el código más cerca de donde es utilizado.