Clases anidadas e internas
lunes, 4 de diciembre de 2023
Las clases anidadas e internas en Java están definidas dentro de otra clase y tienen acceso a los miembros de la clase contenedora, incluyendo los miembros privados.
Hay dos tipos principales de clases anidadas en Java: clases internas estáticas y clases internas no estáticas.
Clases Internas (No Estáticas)
Las clases internas no estáticas son aquellas que se definen dentro de otra clase sin la palabra clave static
. Tienen acceso a todos los miembros de la clase contenedora, incluso a los miembros privados. Además, tienen acceso implícito a la instancia de la clase contenedora.
public class ClaseExterna {
private int datoExterno = 10;
// Clase interna no estática
public class ClaseInterna {
public void mostrarDatoExterno() {
System.out.println("Dato externo desde la clase interna: " + datoExterno);
}
}
public static void main(String[] args) {
ClaseExterna externa = new ClaseExterna();
ClaseExterna.ClaseInterna interna = externa.new ClaseInterna();
interna.mostrarDatoExterno();
}
}
En este ejemplo la clase ClaseExterna
tiene un atributo llamado datoExterno
inicializado con el valor 10. Contiene una clase interna no estática llamada ClaseInterna
. La clase interna tiene un método público llamado mostrarDatoExterno()
, que imprime el valor de datoExterno
desde la clase interna.
La clase interna no estática ClaseInterna
tiene acceso a todos los miembros de la clase externa, incluido el miembro privado datoExterno
. Contiene un método mostrarDatoExterno()
que imprime el valor de datoExterno
desde la clase interna.
En el método main
, se crea una instancia de la clase externa (ClaseExterna
) llamada externa
. Luego, se crea una instancia de la clase interna (ClaseInterna
) utilizando la sintaxis externa.new ClaseInterna()
. Finalmente, se llama al método mostrarDatoExterno()
desde la instancia de la clase interna, lo que imprime el valor de datoExterno
desde la clase interna.
Clases Internas Estáticas
Las clases internas estáticas son similares a las no estáticas, pero se definen con la palabra clave static
. A diferencia de las clases no estáticas, no tienen acceso a los miembros de la clase contenedora sin una instancia de la misma.
public class ClaseExterna {
private static int datoEstatico = 20;
// Clase interna estática
public static class ClaseInternaEstatica {
public void mostrarDatoEstatico() {
System.out.println("Dato estático desde la clase interna estática: " + datoEstatico);
}
}
public static void main(String[] args) {
ClaseExterna.ClaseInternaEstatica internaEstatica = new ClaseExterna.ClaseInternaEstatica();
internaEstatica.mostrarDatoEstatico();
}
}
La clase ClaseExterna
tiene un miembro estático llamado datoEstatico
inicializado con el valor 20. Contiene una clase interna estática llamada ClaseInternaEstatica
.
La clase interna estática ClaseInternaEstatica
no tiene acceso a los miembros no estáticos de la clase externa. Sin embargo, puede acceder a miembros estáticos. Contiene un método público llamado mostrarDatoEstatico()
que imprime el valor de datoEstatico
desde la clase interna estática.
En el método main
, se crea una instancia de la clase interna estática (ClaseInternaEstatica
) utilizando la sintaxis ClaseExterna.ClaseInternaEstatica
. Luego, se llama al método mostrarDatoEstatico()
desde la instancia de la clase interna estática, lo que imprime el valor de datoEstatico
desde la clase interna estática.
Compártelo
Compártelo en tus redes sociales y desafía a tus amigos a resolver problemas de programación. Juntos, podemos aprender y crecer.
Copiado
El codigo se ha copiado correctamente en el portapapeles.