2009-11-26 18 views

Respuesta

49

sobrecarga de métodos se resuelve en tiempo de compilación.

El envío múltiple se resuelve en el tiempo de ejecución.

Cuando se utiliza el envío doble, el método llamado depende del tipo real de receptor y argumentos. Sin embargo, la sobrecarga de métodos solo permite que el método llamado dependa del tipo declarado de los parámetros. ¿Por qué? Java vincula las llamadas al método en tiempo de compilación con su firma completa (vinculación anticipada). La firma completa incluye todos los tipos de parámetros, por lo tanto, cuando el tipo real de un argumento difiere en el tiempo de ejecución (polimoprismo), ¡la sobrecarga no funciona como cabría esperar!

void add(Foo o) { ... } 
void add(Bar o) { ... } 
void client() { 
    Foo o = new Bar(); 
    add(o); // calls add(Foo) not add(Bar)! 
} 

utilizando múltiples despacho sin embargo

void add(Foo o) { o.dispatch(this); } 
void add(Bar o) { o.dispatch(this); } 
void client() { 
    Foo o = new Bar(); 
    add(o); // calls #dispatch as defined in Bar! 
} 

cosas podrían difieren ligeramente en Scala, aunque la distinción general debe ser el mismo que aquí se presenta en todos los lenguajes de programación.

+0

Gracias por el gran ejemplo. – shj

Cuestiones relacionadas