/** * 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高级特性与最佳实践》