En la programación de computadoras 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 hacer cumplir 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 (POO) de que un objeto y sus componentes deben estar protegidos de alguna manera y vinculados al objeto. Las clases internas anónimas y las clases internas en general ayudan a realizar la encapsulación de objetos particularmente complejos. En lugar de tener que crear una clase que se base en una externa separada, uniéndolas artificialmente y exponiendo potencialmente algunos de los componentes, una clase interna anónima puede unir las 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 pasar a los controladores apropiados. Esta técnica es común con devoluciones de llamada y detectores 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 romper la encapsulación y hacer cumplir 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 seguir funcionando más allá de la vida de la clase y el método en el que se anida. Las variables de la clase de envoltura se destruirían una vez que terminara su vida, por lo que las referencias que tenía la clase interna se volverí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 de una clase interna anónima es la protección de código. Muchos lenguajes de programación orientada a objetos proporcionan un mecanismo llamado reflexión. La reflexión 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, el contenido de la clase interna está protegido de la reflexión y el funcionamiento interno de la clase más grande se puede ocultar de manera efectiva.