Cita: ... aunque si sobrecargo el get/set de CocheAutomatico, tendría que tener un atributo conductor de tipo ConductorAutomatico (que es lo equivalente a una relación entre CocheAutomatico y ConductorAutomatico)
No, aunque Conductor conductor sea privado, existe en tu objeto CocheAutomatico. No es accesible directamente pero sí mediante el get/set. Si añades una referencia ConductorAutomatico, tendrás un atributo Conductor vacío (lógico) y un ConductorAutomatico. Entonces ¿para qué heredar?
Cita: ¿Es correcto esta doble relación? Es decir, tanto a nivel Coche --> Conductor y CocheAutomatico --> ConductorAutomatico
En principio NO si heredas, porque lo que tendrás será
Coche --> Conductor
CocheAutomatico --> Conductor
con el filtro en el set te puedes asegurar de que nunca reciba un Conductor que no sea ConductorAutomatico, pero no sé si teóricamente se considera equivalente a la relación que buscas. Funcionar funciona, el resto es un poco a qué huelen las nubes.
Me da la impresión de que partes de un mal planteamiento, si existe la clase Conductor es que quieres que haya una serie de clases conductor que comparten métodos comunes, y para eso te da igual que referenciar un objeto ConductorAutomatico como Conductor. Cuando quieras usar métodos específicos de ConductorAutomatico simplemente haces un cast a ConductorAutomatico (ya te aseguraste mediante el set que el conductor de CocheAutomatico es ConductorAutomatico).