[关闭]
@lzb1096101803 2016-03-07T23:04:37.000000Z 字数 652 阅读 566

多态实现原理

电话面试


单分派与多分派:Java是一门静态多分派,动态单分派的语言;

http://www.iteye.com/topic/1130764
http://www.mamicode.com/info-detail-564707.html
重载在编译器就决定了要调用哪个方法,静态分派动作不是由虚拟机执行的,它是根据role的表面类型而决定调用act(Role role)方法,这是静态绑定;而Actor的执行方法act则是实际由其实际类型决定的,这是动态绑定。

Java中除了static方法和final方法(private方法属于final方法)之外,其他所有方法都是后期绑定,也就是运行时绑定,我们不必判断是否应该进行后期绑定-它会自动发生。

1、静态分派
静态分派与重载有关,虚拟机在重载时是通过参数的静态类型,而不是运行时的实际类型作为判定依据的;静态类型在编译期是可知的;
1)基本类型
以char为例,按照char>int>long>double>float>double>Character>Serializable>Object>...(变长参数,将其视为一个数组元素)
变长参数的重载优先级最低
(注意char到byte或short之间的转换时不安全的)
2)引用类型:则需要根据继承关系进行匹配,注意只跟其编译时类型即静态类型相关
2、动态分派
动态分派与重写(Override)相关
invokevirtual(调用实例方法)指令执行的第一步就是在运行期确定接收者的实际类型,根据实际类型进行方法调用;

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注