am I going down an inherintly bad path
Creo que en tu segundo ejemplo (las subclases de trabajadores) definitivamente eres. Ha asignado cada subclase a un estado específico en la superclase. Entonces, cada vez que desee agregar un estado a la superclase, deberá realizar un cambio en tres ubicaciones (agregar estado a la superclase, agregar una nueva subclase y cambiar el constructor de la clase derivada para agregar una subclase a la lista )
El uso de clases anidadas para acceder a miembros privados parece ser un uso válido (nunca lo he hecho personalmente), pero su caso específico no funciona aquí.
En cuanto al ejemplo de parte del cuerpo. Debido a que todas las clases anidadas son públicas, realmente no está haciendo mucho, excepto el espacio de nombres. Si estas clases crecen para incluir más funcionalidad, es posible que las clases anidadas desordenen las interfaces y que esté examinando el código para encontrar algo específico. También noto que debido a que ha anidado clases, se ve obligado a romper las convenciones de nomenclatura y nombrar sus clases con minúsculas (tal vez esta fue una opción). Pero estos argumentos son más superficiales que cualquier cosa realmente incorrecta.
A menos, por supuesto, que necesitaras implementar un brazo sin cuerpo. Luego, crear un brazo haciendo lo siguiente es confuso porque no hay cuerpo / torso / lado. (Observe también la carcasa confusa).
arm newArm = new Body.torso.side.arm("");