java静态分派

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

猜你喜欢

转载自blog.csdn.net/c1052981766/article/details/79953344
今日推荐