En la programación orientada a objetos (OOP), una clase anidada es una clase que está completamente contenida dentro de otra clase. Una variedad de lenguajes de computadora tienen soporte para esta estructura orientada a objetos, incluyendo C ++ y el lenguaje de programación Java. Si una clase anidada no se declara estática, también se la puede llamar clase interna. Una clase puede contener cualquier número de clases internas, y cada clase interna también puede contener sus propias clases internas. Las clases anidadas pueden ser muy útiles, pero también pueden hacer que las estructuras de clases se compliquen rápidamente, por lo que es mejor que se utilicen como parte de un plan cuidadoso para que no se vuelvan innecesariamente complejas.
Una clase anidada suele ser útil para encapsular pequeños grupos de funciones o variables que son útiles para otra clase específica. Por ejemplo, si la clase A contiene un grupo de métodos que solo ella usa, estos métodos se pueden agrupar en la clase interna B. Los métodos dentro de la clase interna tienen acceso a las variables y métodos de la clase externa mientras mantienen sus propias variables o constantes según sea necesario. Una clase anidada se puede utilizar como una construcción funcional u organizativa; si bien es útil para encapsular la funcionalidad, es igualmente útil como herramienta organizativa. El uso ideal de las clases internas agrupará la funcionalidad relacionada y organizará el código para facilitar la lectura y la comprensión.
Los comentarios deben realizarse en una clase anidada tal como se hace en la clase externa; Es fácil para los principiantes confundir las clases internas con los métodos y olvidar esto. Al comentar una clase anidada, es mejor considerarla como una clase de nivel superior y comentarla en consecuencia. Los comentarios de la clase interna también brindan una oportunidad para que el programador aclare la funcionalidad de la clase interna y la razón fundamental detrás de su esquema organizativo. Pueden existir múltiples clases internas dentro de una clase externa, por lo que es especialmente importante que el programador comente cada una con claridad.
Si una clase anidada no se declara estática, se debe crear explícitamente una instancia de la clase externa antes de que se cree una instancia de la clase interna. Para las clases internas que se declaran estáticas, esto no es cierto. Una clase anidada estática generalmente se puede crear con menos pulsaciones de teclas y puede tener un alcance más amplio que una clase interna simple, por lo que las clases anidadas estáticas son útiles para crear métodos de utilidad de fácil acceso, como fábricas o métodos simples autocontenidos con amplias aplicaciones.
A menudo es útil para los desarrolladores cuando las clases anidadas se describen mediante el lenguaje de modelado unificado. El lenguaje de modelado unificado anota e ilustra la estructura y el comportamiento de las clases de forma inequívoca, a menudo mediante diagramas. Las clases anidadas reciben descripciones independientes de las clases externas en las que residen, por lo que es muy fácil identificar y analizar su funcionalidad. Aunque no es necesario que una clase anidada se anote de esta manera, a menudo es mejor que los programadores se equivoquen por el lado de los mayores detalles.