¿Qué es la clase interna en Java?
Publicado: 2022-04-29El concepto de clase interna en Java es fundamental para la programación Java. En Java, una clase anidada y una clase interna son dos ideas muy similares pero ligeramente distintas de diseño de clases y, a menudo, van de la mano.
Una clase anidada se define dentro de otra clase y tiene dos tipos: clase anidada estática y clase anidada no estática. Por otro lado, una clase interna es un tipo de clase anidada no estática y es más de tres tipos: clase interna miembro, clase interna anónima y clase interna local.
Entonces, ¿qué significan estos tres tipos de clases internas y cuál es su uso? Siga leyendo para averiguarlo en esta guía detallada sobre la clase interna de Java.
Significado de clase interna en Java
Una clase anidada no estática o una clase interna se define dentro de otra clase y tiene acceso a los miembros de la clase externa (clase envolvente). Por el contrario, una clase anidada estática también es una clase definida dentro de otra clase, pero a diferencia de una clase anidada no estática, no puede acceder a las variables miembro de su clase externa. En el caso de una clase anidada no estática, no estamos obligados a crear una instancia de la clase externa. Pero en el caso de una clase interna, primero debemos instanciar la clase externa para poder instanciar la clase interna.
Fuente
Tipos de clase interna en Java
En Java, las clases internas son de los siguientes tres tipos:
- Clase interna de miembro
- Clase interna anónima
- Clase interna local
Ahora, comprendamos cada tipo de clase interna con ejemplos.
1. Clase interna de miembros
Una clase interna miembro en Java es una clase anidada no estática creada dentro de una clase pero fuera de un método. También conocida como clase interna regular, una clase interna miembro se puede declarar con modificadores de acceso como privado, público, predeterminado y protegido.
La sintaxis para una clase interna miembro es la siguiente:
clase exterior{
//código
clase interior{
//código
}
}
Clase interna de miembro en el ejemplo de Java:
A continuación se muestra un programa para demostrar cómo crear una clase interna y acceder a ella. Haremos que la clase interna sea privada y usaremos el método display_Inner() para acceder a la clase.
clase DemoOuter {
numero int;
// clase interna
clase privada DemoInner {
impresión de vacío público () {
System.out.println(“Esta es la clase interna”);
}
}
// Accediendo a la clase interna desde el método dentro
void display_Inner() {
DemoInner interior = new DemoInner();
interior.imprimir();
}
}
clase pública MiClase {
public static void main(String args[]) {
// Instanciando la clase externa
DemoOuter exterior = new DemoOuter();
// Accediendo al método display_Inner()
exterior.display_Inner();
}
}
Salida: Esta es la clase interna
En el ejemplo anterior, OuterDemo es la clase externa, InnerDemo es la clase interna, estamos instanciando la clase interna dentro del método display_Inner(), que se invoca desde el método principal.
Explore nuestros cursos populares de ingeniería de software
SL. No | Programas de desarrollo de software | |
1 | Maestría en Ciencias en Ciencias de la Computación de LJMU & IIITB | Programa de Certificado de Ciberseguridad Caltech CTME |
2 | Bootcamp de desarrollo de pila completa | Programa PG en Blockchain |
3 | Programa Ejecutivo de Postgrado en Desarrollo de Software - Especialización en DevOps | Ver todos los cursos de ingeniería de software |
2. Clase interna anónima
Una clase interna anónima en Java es una clase interna declarada sin ningún nombre de clase y para la cual solo se crea un único objeto. Las clases internas anónimas en Java se declaran y se instancian al mismo tiempo. Son más valiosos cuando queremos anular el método de una clase o interfaz.
La sintaxis de una clase interna anónima en Java es la siguiente:
InteriorAnonimo an_inner = new InteriorAnonimo() {
public void mi_método() {
//código
}
};
Una clase interna anónima en Java se puede crear de dos maneras:
- usando la clase
- Usando la interfaz
Ejemplo de clase interna anónima en Java (usando clase):
Comida de clase abstracta{
vacío abstracto comer ();
}
clase TestAnonymousInner{
public static void main(String args[]){
Comida m=nueva comida(){
void comer(){System.out.println(“¡Buen provecho!”);}
};
carne();
}
}
Salida: ¡Buen provecho!
Clase interna anónima en el ejemplo de Java (usando la interfaz):
Juego de interfaz{
juego vacío ();
}
clase TestAnnonymousInner1{
public static void main(String args[]){
Juego g=nuevo Juego(){
public void play(){System.out.println(“Juegos al aire libre”);}
};
g.jugar();
}
}
Salida: juegos al aire libre
3. Clase interna local
Una clase interna local en Java es una clase creada dentro de un método. Como en el caso de las variables locales, el alcance de la clase interna local permanece restringido dentro del método.
Las clases internas locales se definen dentro de un bloque: el cuerpo de un método, una cláusula if o un bucle for. Una clase interna local no es miembro de ninguna clase envolvente, sino que pertenece al bloque dentro del cual está definida. Por lo tanto, aunque una clase interna local en Java no puede tener ningún modificador de acceso asociado, puede marcarla como abstracta o final. Si queremos invocar los métodos de una clase interna local, debemos instanciar la clase dentro del método.
Ejemplo de clase interna local en Java:
A continuación se muestra un programa de ejemplo para demostrar cómo instanciar el objeto de una clase interna local declarada dentro del método de una clase externa.
paquete claseinterna;
clase pública Outer_Class
{
// Un método de instancia de la clase Outer_Class.
visualización de vacío público ()
{
// Declaración de una clase interna local del método.
clase clase_interna
{
mensaje vacío público(){
System.out.println(“¡Esta es una clase interna local!”);
}
}
// Cree una instancia de una clase interna local de método y llame al método msg() utilizando la variable de referencia de objeto i.
Clase_interna i = nueva Clase_interna();
i.msg();
}
public static void main(String[] args)
{
// Crea un objeto de la clase externa Outer_Class.
Outer_Class o = new Outer_Class();
o.display();
}
}
Salida: ¡Esta es una clase interna local!
Con los fundamentos de la clase interna de Java en mente, comprendamos por qué los necesitamos en primer lugar.
Ventajas de la clase interna de Java
Una clase interna en Java trae tres utilidades importantes a la mesa. Estos son los siguientes:
1. Dado que una clase interna de Java puede acceder a los miembros de datos y métodos de la clase principal/externa, incluidos los privados, representa un tipo específico de relación.
2. Una clase interna de Java reduce significativamente la codificación, ya que requiere menos escritura.
3. Una clase interna en Java agrupa lógicamente clases e interfaces en un solo lugar, mejorando así la legibilidad del código y facilitando su mantenimiento.
Resumiendo
El concepto de clases anidadas simplifica y agrega flexibilidad para crear clases en cualquier lugar de la programación Java. En este sentido, una clase anidada no estática conocida como clase interna es particularmente útil, como ya hemos visto en nuestra discusión hasta ahora.
Nos gustaría terminar indicando dos casos en los que el uso de la clase interna parece más apropiado. Primero, una clase interna de Java es ideal cuando dos clases tienen una relación cercana y ninguna otra clase puede acceder a ellas. Y en segundo lugar, las clases internas son comunes en el manejo de eventos de programación de la GUI de Java. Por lo tanto, las clases internas de Java se pueden usar de manera segura donde están involucrados los oyentes y sus componentes GUI.
¿Te preguntas dónde aprender Java?
Certificación PG vinculada al trabajo de upGrad en ingeniería de software es lo que buscas!
Especialmente diseñado para recién graduados y últimos años, la Certificación PG vinculada al trabajo de upGrad en Ingeniería de software es perfecta para aquellos que desean aprender a programar y ubicarse en roles de software de nivel de entrada. ¡Este programa en línea de 5 meses enseñará las mejores habilidades de software como Java, JavaScript, HTML5, DSA, AWS, MERN y más!
Puntos destacados del programa:
- Especialización en MERN Stack/Cloud-Native
- Más de 500 horas de aprendizaje en línea
- Más de 350 horas de formación práctica
- Más de 50 sesiones en vivo
- Cinco proyectos industriales
- Networking con expertos de la industria
- Foros de preguntas y respuestas con colegas y expertos de la industria
- Apoyo de aprendizaje de asistentes de enseñanza y mentores de la industria.
¡Regístrese hoy para aprender de los mejores en la industria!
¿Cuál es la diferencia entre clase interna y subclase?
Una clase interna es una clase anidada o definida dentro de otra clase. Por otro lado, una subclase es una clase que se deriva de otra clase. Además, mientras que solo se puede acceder a una clase interna utilizando la referencia de la clase externa dentro de la cual está anidada, se puede acceder a una subclase directamente a menos que la subclase haya heredado variables privadas.
¿Podemos escribir una clase dentro de una clase en Java?
Sí, podemos definir una clase dentro de otra clase en Java. Esta clase se conoce como clase anidada y nos permite organizar las clases de forma lógica en un solo lugar, creando así un código más mantenible y legible. Como parte de su clase envolvente, una clase anidada puede declararse pública, privada, privada del paquete o protegida.
¿Puede la clase interna de Java ser privada?
Sí, una clase interna de Java puede ser privada. Pero una vez que una clase interna se declara privada, no se puede acceder a ella desde un objeto que está fuera de la clase. Las clases internas y externas tienen acceso a las variables de instancia privada y métodos privados de cada una. Mientras estemos dentro de la clase externa o interna, los modificadores private y public tienen el mismo efecto.