• 2020.7.22


    一、今日学习内容:

    今天学习5.2多态变化。

    1、java中多态的实现:主要体现在方法的重载和覆盖上。

    java多态概述:多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。Java 对于方法调用动态绑定的实现主要依赖于方法表,但通过类引用调用(invokevitual)和接口引用调用(invokeinterface)的实现则有所不同。

    2、类型转型:

        向上转型:

                  父类 对象=new 子类()

        向下转型;

                  父类 对象1=new 子类()

                  子类 对象2=(子类)对象

    3、动态绑定与静态绑定:

    动态绑定:在运行时根据具体对象的类型进行绑定。若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。

    动态绑定的过程:
    虚拟机提取对象的实际类型的方法表;
    虚拟机搜索方法签名;
    调用方法。

    静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现。针对java,可以简单的理解为程序编译期的绑定;这里要特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定。

    差别:其实上述解释可以看出很多东西了。
    (1)静态绑定发生在编译时期,动态绑定发生在运行时
    (2)使用private或static或final修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。
    (3)静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。
    (4)重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成。

    二、遇到的问题:

    动态绑定与静态绑定不理解。

    三、明日学习计划:

    static关键字,继续阅读《大道至简》。

  • 相关阅读:
    cf round #421 div2 D. Mister B and PR Shifts
    cf round #421 div2 C. Mister B and Boring Game(trick)
    UVa 12716 GCD XOR
    cf 821E Okabe and El Psy Kongroo(矩阵快速幂)
    hdu 6109 数据分割(并查集+set)
    poj 2887 Big String(块状链表)
    hdu 6119 小小粉丝度度熊(区间双指针)
    hdu 6118 度度熊的交易计划(可行费用流)
    hdu 6015 Gameia(树上博弈)
    hdu 6096 String(AC自动机巧妙建图)
  • 原文地址:https://www.cnblogs.com/marr/p/13450884.html
Copyright © 2020-2023  润新知