多个调度和方法重载有什么区别?

gnu*_*nce 35 oop

在Scala等语言中,通过更改参数的数量和/或方法的参数类型,可以为一个方法名称定义多个定义.这称为方法重载.

这与多次派遣有什么不同?

谢谢

aku*_*uhn 56

方法重载在编译时解决.

在运行时解析多个分派.

使用双重调度时,被调用的方法取决于接收器和参数的实际类型.但是,方法重载只允许被调用的方法取决于声明的参数类型.为什么?Java在编译时将方法调用与其完整签名(早期绑定)绑定在一起.完整签名包括所有参数类型,因此当参数的实际类型在运行时(polymoprhism)不同时,重载不会像您期望的那样工作!

void add(Foo o) { ... }
void add(Bar o) { ... }
void client() {
    Foo o = new Bar();
    add(o); // calls add(Foo) not add(Bar)!
}
Run Code Online (Sandbox Code Playgroud)

然而,使用多次发送

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!
}
Run Code Online (Sandbox Code Playgroud)

Scala中的情况可能略有不同,尽管一般区别应与所有编程语言中的相同.

  • 谢谢你的好例子。 (2认同)