简述分派
2019-08-25 21:32
1331 查看
这里所谓的分派指的是在Java中对方法的调用。Java 有三大特性:封装、继承、多态。分派是多态性的体现。那么所谓方法分派,就是虚拟机如何确定应该执行哪个方法!
下面的概念都是基于继承环境下解释的
分派 --- 分为静态分派和动态分派。
如有这样的两个类,其继承关系为 Cat extends Animal,
在调用时这样调用
Animal tomcat = new Cat();
tomcat 变量它的静态类型就是 Animal ,它的动态类型就是 Cat 。
静态分派:
所有依赖静态类型来定位方法执行版本的分派,称之为静态分派。发生在编译时期,典型应用是方法重载。静态分派发生在编译时期,因此可以确定静态分配的动作实际不是由虚拟机执行的。简单来说 JVM在重载时(发生在编译阶段),是通过参数的静态类型来作为判断依据去找相关的执行方法的,以静态类型的方法为准。
动态分派:
在运行期根据实际类型确定执行方法的过程,典型应用是重写。是一种动态的概念。
重写时JVM选择哪个执行的方法,是根据变量的实际类型来判断的,执行实际类型的那个方法。
动态分派的实现是在方法区中建立方法表,如果子类没有重写父类的方法,则子类虚方法表中,该方法的入口地址,与父类指向相同,否则子类方法表中的地址会替换成指向子类重写的方法的入口地址。
相关文章推荐
- 1. C#中有哪些访问修饰符,简述其访问权限
- JavaScript 简述-入门
- ADB源码分析(一)――ADB模块简述
- 简述JS控制台的使用
- java动态编程简述
- 详细简述Spring MVC 工作原理?
- SOA面向服务架构简述
- PageHelper简述
- 简述JAVA的几种设计模式
- 机器学习框架简述
- c & c++ 编译过程简述
- 《Code》简述与体会——第18章节
- Linux音频驱动简述
- Redhat安装MySQL数据库简述
- java的动态绑定与双分派(规避instanceof)
- Linux文件系统路径与目录结构简述
- linux device model简述
- 纯干货!live2d动画制作简述以及踩坑
- 一道java面试题-方法静态分派
- 知识扩展:求100以内的质数 简述多种算法的实现方法