- 这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战
 
Java 动态绑定机制
- Java 重要机制:动态绑定机制
 - Java 动态绑定机制:
 
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
 - 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
 
1  | java复制代码package com.xdr630.dynamic_;  | 
- 演示结论1
 - 把上面子类中的 
sum()方法注释掉,main方法中的a.sum()输出什么? 
1  | java复制代码public class DynamicBinding {  | 
- 代码分析:
 
- 这个时候 
a的运行类型是B,a.sum()就会先找子类中的sum()方法,而此时子类中的sum()方法被注销了,所以只能去父类找sum()方法,sum方法中再去调getI()方法,而此时父类和子类都有getI()方法。 - 因为
a.sum()方法的运行类型B,根据动态绑定机制,所以找到子类中的getI()方法,而在getI()中的return i这个i是属性,没有绑定机制,在子类中声明的,直接返回 20 ,然后回到父类中的sum()方法 ,20 + 10,所以最后a.sum的输出值为30 
- 演示结论2
 - 把上面子类中的 
sum1()方法注释掉,main方法中的a.sum1()输出什么? 
1  | java复制代码public class DynamicBinding {  | 
- 代码分析:
 
a的运行类型是B,所以从子类B开始找,而此时sum1方法被注释了,只能去找父类A中的sum1方法,在sum1方法中return i + 10,而i是属性,没有动态绑定机制,哪里声明,哪里使用,此时i属性在父类A中声明,所以i为10,所以a.sum1的输出值为20
本文转载自: 掘金