/**
* java静态分派
* java编译器在overload时通过参数的静态类型而不是实际的类型作为片段的依据的,并且静态类型是编译期可知的。
* 静态分派发送在编译阶段。
* @author idea-pcfff
*
*/
public class StaticDispatch {
static abstract class Human{
}
static class Man extends Human{
}
static class Woman extends Human{
}
public void sayHello(Human h){
// if(h instanceof Woman){
// sayHello((Woman) h);
// }
// else if(h instanceof Man){
// sayHello((Man) h);
// }else{
System.out.println("hello h");
//}
}
public void sayHello(Man m){
System.out.println("hello m");
}
public void sayHello(Woman w){
System.out.println("hello w");
}
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
StaticDispatch sd = new StaticDispatch();
sd.sayHello(man);
// hello h
sd.sayHello(woman);
// hello h
}
}
参考:《深入理解Java虚拟机 JVM高级特性与最佳实践》