java 动态绑定 学习记录
来源:互联网 发布:rxjava对比java多线程 编辑:程序博客网 时间:2024/06/07 11:00
java核心卷1学习 4.6
理解方法调用过程,多态,多态绑定,方法重载
方法调用过程
弄清楚在对象上应用方法如何调用很重要 eg.要调用x.f(args),x是声明为类 C的一个对象
1. 编译器查看对象的声明类型和方法名。 编译器会找到所有c类中的名字为f的方法和其父类中访问属性为public且名字为f的方法。
2. 接着,编译器查看调用方法时提供的参数类型。如果所有备选的方法f中存在一个与提供的参数类型完全一样的,就选择这个方法。这个过程叫做 重载解析。这中间会涉及类型转换的复杂问题。至此。编译器已经获得需要调用的方法名跟参数类型
3. 静态绑定:如果是private方法,static方法,final方法或者构造函数。编译器可以准确知道调用哪个方法。
动态绑定:如果调用的方法依赖于x的实际类型,编译器会采用动态绑定的方式生成一条调用f的指令。
4.程序采用动态绑定调用方法时,虚拟机一定会调用与x所引用对象的实际类型最合适的那个类的方法。比如。x的实际类型是D类,d类是c类的子类,则编译器会先去找d类的f方法。没有的话会在d类的父类中寻找f。
实际中,每次调用方法开销很大,所以,虚拟机会预先为每个类创建了方法表。表中列出了所有方法的签名和实际调用的方法。每次调用方法时候,可以直接查看这个表。
动态绑定好处:无需对先存的代码进行修改,就可以对程序进行扩展。
多态
对于多态,可以总结它为:
一个基类的对象引用,被赋予不同的子类对象引用,执行该方法时,将表现出不同的行为。这就体现了java的多态行
为什么会有多态性?
java是单继承,灵活性不够。所以引进多态,抽象 接口来弥补这个缺点。多态性可以基于继承实现,可以基于接口实现。
基于继承实现多态:
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
五 is-a是置换法则,程序中出现父类对象的任何地方都可以用子类对象置换。例如,可以将一个子类的对象赋值给父类变量引用,但是不能将一个父类的引用赋值给子类变量。java中向上转型是自动的,向下转型必须是强制转型。
具体多态性见链接
http://www.cnblogs.com/chenssy/p/3372798.html
动态绑定
Java的动态绑定又称为运行时绑定。意思就是说,程序会在运行的时候自动选择调用哪儿个方法。
- 子类重写父类中的方法,调用子类中的方法
- 子类没有重写父类中的方法,所以到父类中寻找相应的方法
- 动态绑定只是针对对象的方法,对于属性无效。因为属性不能被重写。
==
- java 动态绑定 学习记录
- Java 学习笔记 (12) - 动态绑定
- jquery动态添加元素绑定事件学习记录
- 学习笔记之 java的动态绑定与静态绑定
- 【Java学习笔记】继承,动态绑定与静态绑定
- Java【动态绑定、静态绑定】-动态绑定
- java动态绑定静态绑定
- Java动态绑定 静态绑定
- java 静态绑定 动态绑定
- Java 动态绑定,静态绑定
- java中动态代理的学习记录
- java&cpp 动态绑定
- Java 动态绑定详解
- Java的动态绑定
- java动态绑定详解
- JAVA动态绑定详解
- [java]动态绑定
- java的动态绑定
- APM新增一条新消息并在地面站missionplanner中的state中显示
- java swing 创建 table 表格
- 对结对编程的认识--简单代码实现随机产生四则运算
- 创建数据库,库名为考生姓名拼音的缩写,例如考生姓名为张三
- (java)leetcode-26
- java 动态绑定 学习记录
- phpStydy配置memcache扩展
- 4-9 二叉树的遍历*
- 李笑来:成长是永恒的刚需
- sql中的基本查询语句
- AspectJ-基于注解的实现-切入点的定义
- C++笔记:面向对象编程基础
- C++作业4
- 黑马外卖笔记(二)