动态绑定机制
例题如下:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器