C procedural no es orientado a objetos, java sí lo es, por lo que es difícil comparar. Java se parece más a C++.
En java como bien dices, puede haber varias clases que implementen una misma interfaz o sólo una, depende de lo que quieras o necesites, en C no puedes hacerlo, el linker de C sólo te admite una implmentación de una función definida en un .h. Pero sí podrías en C++ hacer varias clases que implemente una misma interfaz de C++, ya que también es orientado a objetos.
El motivo de esto es que en java se permite el polimorfismo (en C++ también, en C no), es decir, varias implementaciones de una misma interfaz. Tu código java podría trabajar con la interfaz sin saber con qué clase concreta está trabajando. por ejemplo,
Código Java:
Ver originalpublic void unMetodo (UnaInterfaz a){
a.metodoDeLaInterfaz();
}
A este unMetodo podrías llamarlo de estas formas
Código Java:
Ver originalunMetodo (new UnaClaseQueImplementeLaInterfaz());
unMetodo (new OtraClaseQueImplementeLaInterfaz());
y ambos funcionaran. Dentro de unMetodo(), la llamada a.metodoDeLaInterfaz() llamará realmente al metodoDeLaInterfaz() implementado en una u otra clase, según le hayamos pasado.
Se bueno.