Sobes.tech
Middle

¿Qué son las clases anidadas?

sobes.tech AI

Respuesta de la IA

Una clase anidada es una clase definida dentro de otra clase.

Tipos de clases anidadas en Java:

  • Clases anidadas estáticas (Static Nested Classes):

    • Accesibles desde la clase externa sin su instancia.
    • No tienen acceso directo a los campos y métodos no estáticos de la clase externa.
    • Se declaran con la palabra clave static.
  • Clases internas (Inner Classes):

    • Clases internas miembro (Member Inner Classes):
      • Se declaran a nivel de miembros de la clase externa.
      • Tienen acceso a todos los miembros de la clase externa (incluidos los privados).
      • Requieren una instancia de la clase externa para crear su instancia.
    • Clases internas locales (Local Inner Classes):
      • Se definen dentro de un método, constructor o bloque de inicialización.
      • Solo son visibles dentro de ese método/bloque.
      • Tienen acceso a variables locales finales o efectivamente finales del contexto externo.
    • Clases internas anónimas (Anonymous Inner Classes):
      • Clases sin nombre.
      • Se usan para crear objetos que implementan una interfaz o extienden una clase de inmediato.
      • Se definen y se instancian en una sola operación.

Ejemplo de clase anidada estática:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Puede acceder a miembros estáticos de la clase externa
            System.out.println(msg);
        }
    }
}
// Uso
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Ejemplo de clase interna miembro:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Puede acceder a todos los miembros de la clase externa
            System.out.println(msg);
        }
    }
}
// Uso
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Ventajas del uso de clases anidadas:

  • Agrupación: Las clases relacionadas lógicamente pueden agruparse.
  • Encapsulación: Las clases internas pueden acceder a los miembros privados de la clase externa, mejorando la encapsulación.
  • Legibilidad y mantenibilidad: Ocultan clases auxiliares dentro de la clase principal.
  • Eficiencia: Pueden usarse para crear estructuras de datos más compactas y eficientes.