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

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

http://www.xdnf.cn/news/8026.html

相关文章:

  • 深度解析:Spark、Hive 与 Presto 的融合应用之道
  • SpringBoot Day_03
  • Docker 与微服务架构:从单体应用到容器化微服务的迁移实践
  • 谷歌medgemma-27b-text-it医疗大模型论文速读:多语言大型语言模型医学问答基准测试MedExpQA
  • 基于STM32F4的cubemx关于RTC配置说明
  • Docker架构详解
  • Win 系统 conda 如何配置镜像源
  • 【二刷力扣】【力扣热题100】今天的题目是:两数之和
  • Spring核心原理:动态数据源切换的企业级解决方案
  • springboot03
  • MqSQL
  • Oracle 11G RAC重启系统异常
  • WPF读取json文件,用到combox控件
  • 设计双向链表--LeetCode
  • 如果验证集缺失或测试集缺失应该怎么办?
  • 常见的游戏服务器架构有哪些?
  • WebSphere Application Server(WAS)8.5.5教程第十讲
  • Kotlin 极简小抄 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)
  • 漏洞修复的两种核心方法
  • Chord Crossing_abc405分析与解答
  • 第21天-pyttsx3语音播放功能
  • js逆向练习 客户端的加密数据的逆向
  • 8.数据驱动的决策分析与可视化实践
  • Open3D 统计滤波器
  • RK3588 USB-OTG 功能使用记录
  • MAC系统安装node版本管理工具nvm
  • 条件随机场 (CRF) 原理及其在语义分割中的应用
  • 关于 Web 安全实践:4. 文件上传功能的风险分析与防护
  • 使用泛型服务基类简化Entity Framework对数据库访问逻辑
  • 基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?