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的动态绑定又称为运行时绑定。意思就是说,程序会在运行的时候自动选择调用哪儿个方法。

  1. 子类重写父类中的方法,调用子类中的方法
  2. 子类没有重写父类中的方法,所以到父类中寻找相应的方法
  3. 动态绑定只是针对对象的方法,对于属性无效。因为属性不能被重写。

==

0 0
原创粉丝点击