- 这是我参与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
本文转载自: 掘金