Junior
¿Qué son las clases anidadas?
sobes.tech AI
Respuesta de la IA
Las clases anidadas son clases declaradas dentro de otra clase. Se dividen en dos tipos principales: clases anidadas estáticas (miembros estáticos de la clase) y clases internas (miembros no estáticos).
Clases anidadas estáticas:
- Están relacionadas con la clase externa, no con su instancia.
- Solo pueden acceder a los miembros estáticos de la clase externa.
- Pueden ser creadas sin una instancia de la clase externa.
Clases internas:
- Están relacionadas con una instancia de la clase externa.
- Pueden acceder a todos los miembros de la clase externa (estáticos y no estáticos), incluyendo privados.
- Requieren una instancia de la clase externa para su creación.
Ejemplos de uso:
- Agrupación: Las clases relacionadas lógicamente pueden agruparse para mejorar la legibilidad y organización del código.
- Encapsulación: Las clases internas tienen acceso a los miembros privados de la clase externa, permitiendo encapsular detalles de implementación.
- Oyentes de eventos (Java): Frecuentemente se usan para crear clases internas anónimas.
- Clases auxiliares: Clases pequeñas usadas solo por la clase externa.
// Ejemplo de clase anidada estática
class OuterClass {
static int outerStaticField = 1;
int outerInstanceField = 2;
static class StaticNestedClass {
void display() {
System.out.println("Campo estático externo: " + outerStaticField);
// No se puede acceder directamente a outerInstanceField
}
}
}
// Ejemplo de clase interna
class AnotherOuterClass {
int outerField = 10;
class InnerClass {
void display() {
System.out.println("Campo externo: " + outerField); // Acceso al campo de la clase externa
}
}
}
Tabla comparativa:
| Característica | Clase anidada estática | Clase interna |
|---|---|---|
| Relación | Con la clase externa | Con una instancia de la clase externa |
| Acceso a miembros externos | Solo estáticos | Todos los miembros (incluyendo privados) |
| Requiere instancia | No | Sí |
| Puede contener miembros estáticos | Sí | No (excepto constantes) |