Supongamos que está construyendo un árbol, una lista, un gráfico, etc. ¿Por qué debería exponer los detalles internos de un nodo o una célula al mundo externo?
Cualquiera que use un gráfico o una lista solo debe confiar en su interfaz, no en su implementación, ya que es posible que desee cambiarlo algún día en el futuro (por ejemplo, de una implementación basada en matriz a una basada en puntero) y los clientes que usan su estructura de datos ( cada uno de ellos ) tendría que modificar su código para adecuarlo a la nueva implementación.
En cambio, encapsular la implementación de un nodo o una celda en una clase interna privada le da la libertad de modificar la implementación en cualquier momento que lo necesite, sin que los clientes se vean obligados a ajustar su código en consecuencia, siempre que la interfaz de su estructura de datos permanezca intacto
Ocultar los detalles de la implementación de su estructura de datos también conlleva ventajas de seguridad, ya que si desea distribuir su clase, solo pondrá a disposición el archivo de interfaz junto con el archivo de implementación compilado y nadie sabrá si realmente está utilizando matrices o punteros para su implementación, protegiendo así su aplicación de algún tipo de explotación o, al menos, conocimiento debido a la imposibilidad de mal uso o inspección de su código. Además de los problemas prácticos, no subestimes el hecho de que es una solución extremadamente elegante en tales casos.