一、今日学习内容:
今天学习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关键字,继续阅读《大道至简》。