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中的情况可能略有不同,尽管一般区别应与所有编程语言中的相同.