当前位置: 首页 > news >正文

java 基础知识巩固

java 动态绑定机制

java的动态绑定机制

  • 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
  • 当调用对象属性时,没有动态绑定机制,哪里声明哪里使用
public class Main {public static void main(String[] args) {A a=new B();System.out.println(a.sum());System.out.println(a.sum1());}
}class A{public int i = 10;public int sum(){return getI() + 10;}public int sum1(){return i + 10;}public int getI(){return i;}
}class B extends A {public int i= 20;public int sum() {return i+ 20;}public int getI() {return i;}public int sum1(){return i+ 10;}
}

这里我们需要注意的是如果如上代码不做任何修改的话,打印的结果是:

40
30

现在我们对代码进行一定的修改然后再次查看打印结果

public class Main {public static void main(String[] args) {A a=new B();System.out.println(a.sum());System.out.println(a.sum1());}
}class A{public int i = 10;public int sum(){return getI() + 10;}public int sum1(){return i + 10;}public int getI(){return i;}
}class B extends A {public int i= 20;public int getI() {return i;}public int sum1(){return i+ 10;}
}

打印结果是

30
30

这个结果猛一看上去可能会有点晕,不太符合我们的预期,其实造成这样的显现是因为java的动态绑定机制。

修改代码以后运行类型虽然是B但是B中没有了SUM()方法,所以我们会向上查找父类的方法,在父类中找到了SUM()所以我们会运行父类中的SUM()方法,但是父类中的SUM()方法调用了一个getI()这里就容易把人搞晕了,因为这里父类和子类都有getI()这个方法,具体调用哪一个呢?

以为有java的动态绑定机制,所以会运行B类中的getI()方法,也就最终导致了运行结果为30

相关文章:

  • 论文阅读笔记——PixArt-α,PixArt-δ
  • [Harmony]网络请求
  • 【COMPUTEX 2025观察】NVIDIA开放NVLink:一场重构AI算力版图的“阳谋“
  • 应用案例 | 集成Docker,解锁 HMI/网关的定制化应用
  • 数据库基础面试题(回答思路和面试建议)
  • 力扣第450场周赛
  • upload-labs靶场通关详解:第14关
  • python:基础爬虫、搭建简易网站
  • Intel oneAPI 入门
  • 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第八章
  • RAG系统实战:文档切割与转换核心技术解析
  • Postgresql14+Repmgr部署
  • sentinel滑动时间窗口算法详解
  • 性能测试场景题
  • leetcode hot100刷题日记——10.螺旋矩阵
  • Day 0015:Metasploit 基础解析
  • ollama接口配合chrome插件实现商品标题和描述生成
  • 手写简单的tomcat
  • 硅基计划2.0 学习总结 叁
  • fscan教程1-存活主机探测与端口扫描
  • 租车网站建设/北京网站建设公司优势
  • 做宠物网站心得/国际国内新闻最新消息今天
  • 动态网站开发 PHP/杭州网站建设方案优化
  • 大连开发区社保网站/免费发广告的网站大全
  • 培训行业网站建设是什么/杭州seo公司排名
  • 怎么做电玩网站/百度推广优化怎么做