Skip to main content

¿Qué es una clase interna anónima?

En la programación informática orientada a objetos, una clase interna anónima es una clase que se declara dentro de un método pero no tiene nombre. Una clase interna anónima tiene varias restricciones que la hacen diferente de una clase normal, incluida una restricción en el alcance de las variables a las que puede acceder. Hay algunas situaciones muy específicas en las que el uso de una clase interna anónima puede hacer que el código fuente sea más legible, pero se usa principalmente para ayudar a imponer la encapsulación donde la generación de clases separadas podría complicarlo.

La encapsulación es el concepto en la programación orientada a objetos (OOP) de que un objeto y sus componentes deben estar de alguna manera protegidos y vinculados al objeto. Las clases internas anónimas, y las clases internas en general, ayudan a realizar la encapsulación para objetos particularmente complejos. En lugar de tener que crear una clase que se base en una clase externa separada, unirlas artificialmente y exponer potencialmente algunos de los componentes, una clase interna anónima puede unir a los dos sólidamente.

En algunos lenguajes de programación, una clase interna anónima puede ayudar a superar las restricciones de la herencia única. Si un objeto hereda de una clase pero luego necesita acceder a otra, se puede generar una clase interna sobre la marcha y luego pasarla a los controladores apropiados. Esta técnica es común con devoluciones de llamada y oyentes de eventos. La única alternativa sería crear una segunda clase completa en la que solo se anulan uno o dos métodos.

Las clases internas anónimas tienen algunas restricciones para evitar la ruptura de la encapsulación y para imponer el alcance. La restricción principal es que una clase interna anónima no puede acceder a las variables del método en el que reside a menos que esas variables se declaren como finales. Esto se debe a que la clase interna podría continuar funcionando más allá de la vida de la clase y el método en el que anida. Las variables de la clase de envoltura se destruirían una vez que su vida hubiera terminado, por lo que las referencias que tenía la clase interna serían instantáneamente inválidas. La única excepción a esto es una variable final, porque existirá más allá de la instancia.

Uno de los usos más específicos para una clase interna anónima es la protección de código. Muchos lenguajes OOP proporcionan un mecanismo llamado reflexión. Reflection permite que un programa diseccione otra clase y vea cuáles son sus variables y métodos miembros, pero no el código en sí. Al usar una clase interna anónima, los contenidos de la clase interna están protegidos de la reflexión y el funcionamiento interno de la clase más grande se puede ocultar de manera efectiva.