方法调用
摘自《Java核心技术–卷一》
注:方法名称+参数列表称为方法的签名
一、重载解析:
-编译期多态
- 当一个类中存在多个方法名称相同的方法时(比如
M方法
),编译器会一一列出该类中所有的M方法
和其父类中public修饰的M方法
- 方法调用时,编译器会根据方法的参数列表选择合适的
M方法
,这称为重载解析
二、静态绑定:
如果是private()
,static()
,final()
方法或者构造方法,编译器可以准确地知道应该调用哪个方法,这称为静态绑定
三、动态绑定:
-运行时多态
调用的方法依赖于隐式参数的实际类型,在运行时实现动态绑定
动态绑定过程:
简述:java虚拟机为父子类生成方法表,当真正调用方法的时候查表就OK了
以e.getAction()
为例
- 虚拟机提取e的实际类型的方法表。可能是 Animal 或Cat 的方法表,或 Cat类的其他子类的方法表。
- 虚拟机搜索定义
getAction
签名的类。此时,虚拟机已经知道应该调用哪个方法。 - 最后,虚拟机调用方法。