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

阅读更多
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭