Saltar al contenido principal
Documentos
Java keywordsMatrices JavaProgramación orientada a objetos en JavaJava File HandlingIntroducción a JavaConceptos básicos del lenguaje Java

Java Inner Classes

Las clases internas de Java son clases definidas dentro de otra clase. Se utilizan para agrupar lógicamente clases que sólo se utilizan en un lugar, aumentan la encapsulación y pueden dar lugar a un código más legible y mantenible. Las clases internas pueden acceder a los miembros (incluidos los miembros privados) de la clase externa.

Tipos de clases internas

  1. Clase anidada no estática (Clase interna): Asociado a una instancia de la clase externa.
  2. Clase estática anidada: No está asociado a una instancia de la clase externa y sólo puede acceder a los miembros estáticos de la clase externa.
  3. Clase interna local: Definido dentro de un bloque, normalmente un método.
  4. Clase interna anónima: Una clase sin nombre, utilizada para instanciar objetos con cierta funcionalidad "sobre la marcha".

Ejemplos

Ejemplo 1: Clase interna no estática

public class OuterClass {
    private String message = "Hello from Outer Class";

    class InnerClass {
        void display() {
            System.out.println(message);
        }
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}

En este ejemplo, InnerClass es una clase interna no estática. Puede acceder al campo message de OuterClass. Una instancia de InnerClass se crea utilizando una instancia de OuterClass.

Ejemplo 2: Clase estática anidada

public class OuterClass {
    private static String message = "Hello from Static Nested Class";

    static class StaticNestedClass {
        void display() {
            System.out.println(message);
        }
    }

    public static void main(String[] args) {
        OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
        nested.display();
    }
}

Aquí, StaticNestedClass es una clase estática anidada. Puede acceder directamente a los miembros estáticos de OuterClass. No se necesita ninguna instancia de OuterClass para crear una instancia de StaticNestedClass.

Ejemplo 3: Clase interna anónima

public class OuterClass {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Running from Anonymous Inner Class");
            }
        };
        new Thread(runnable).start();
    }
}

Este ejemplo muestra una clase interna anónima que implementa la interfaz Runnable. Se utiliza para proporcionar una implementación específica del método run sobre la marcha.

Consejos y buenas prácticas

  • Utilízalo con moderación: Las clases internas pueden dificultar la lectura del código si se utilizan en exceso. Utilízalos cuando pertenezcan lógicamente a la clase exterior.
  • Clases anónimas: Ideal para implementar interfaces o clases abstractas con poca funcionalidad.
  • Acceder a los miembros: Las clases internas pueden acceder a todos los miembros de la clase externa, incluidos los miembros privados, lo que las hace útiles para la encapsulación.
  • Clases estáticas anidadas: Se utiliza cuando la clase anidada no necesita acceder a los miembros de instancia de la clase externa.
  • Evita la complejidad: Mantén sencillas las clases internas para evitar aumentar la complejidad de la clase externa.

Aprende Java Essentials

Desarrolla tus conocimientos de Java desde la base y domina los conceptos de programación.
Empieza a aprender gratis