动态绑定机制

例题如下:

复制代码
class M{
    int i = 10;

    public int sum(){
        return getI()+10;
    }

    public int sum1(){
        return i+10;
    }
    
    public int getI(){
        return i;
    }
}
class N extends M{
    int i = 20;
    
    public int getI(){
        return i;
    }

    public int sum(){
        return i+20;
    }
    
    public int sum1(){
        return i+10;
    }
}
复制代码

 


M m = new N();
System.out.println(m.sum());//输出结果为40,
System.out.println(m.sum1());//输出结果为30
当调用方法时,方法会和该对象的内存地址即运行类型进行绑定,当调用属性时则没有动态绑定,那里声明,哪里使用。

具体为:当注销N类的sum与sum1方法时:
m调用sum方法,因为m的运行类型为N,所以先去N中找sum方法,N中没有则去到父类M中调用M的sum方法,M的sum方法内返回了一个getId方法,此时M,N中均有该方法,但因存在动态绑定,所以返回的N中的
getId方法,N的getId方法中返回的i为N中的i,所以输出结果为20+10=30
m调用sum1方法,因为m的运行类型为N,所以先去N中找sum1方法,N中没有则去到父类M中调用M的sum1方法,此时sum1方法内返回的i为M中的i,所以输出结果为:10+10=20




posted @   朱不悔  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示