Sobes.tech
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
Puede contener miembros estáticos No (excepto constantes)