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
Clase anidada no estática (Clase interna): Asociado a una instancia de la clase externa.
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.
Clase interna local: Definido dentro de un bloque, normalmente un método.
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
publicclassOuterClass{privateString message ="Hello from Outer Class";classInnerClass{voiddisplay(){System.out.println(message);}}publicstaticvoidmain(String[] args){OuterClass outer =newOuterClass();OuterClass.InnerClass inner = outer.newInnerClass();
inner.display();}}Con la tecnología de
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
publicclassOuterClass{privatestaticString message ="Hello from Static Nested Class";staticclassStaticNestedClass{voiddisplay(){System.out.println(message);}}publicstaticvoidmain(String[] args){OuterClass.StaticNestedClass nested =newOuterClass.StaticNestedClass();
nested.display();}}Con la tecnología de
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
publicclassOuterClass{publicstaticvoidmain(String[] args){Runnable runnable =newRunnable(){@Overridepublicvoidrun(){System.out.println("Running from Anonymous Inner Class");}};newThread(runnable).start();}}Con la tecnología de
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.
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
Ejemplos
Ejemplo 1: Clase interna no estática
En este ejemplo,
InnerClasses una clase interna no estática. Puede acceder al campomessagedeOuterClass. Una instancia deInnerClassse crea utilizando una instancia deOuterClass.Ejemplo 2: Clase estática anidada
Aquí,
StaticNestedClasses una clase estática anidada. Puede acceder directamente a los miembros estáticos deOuterClass. No se necesita ninguna instancia deOuterClasspara crear una instancia deStaticNestedClass.Ejemplo 3: Clase interna anónima
Este ejemplo muestra una clase interna anónima que implementa la interfaz
Runnable. Se utiliza para proporcionar una implementación específica del métodorunsobre la marcha.Consejos y buenas prácticas