Java学习第15天

一、今日学习多态变化。

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

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

2、类型转型:

    向上转型:

              父类 对象=new 子类()

    向下转型;

              父类 对象1=new 子类()

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

多态的作用:消除类型之间的耦合关系。

多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

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

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

动态绑定的过程:

  1. 虚拟机提取对象的实际类型的方法表;
  2. 虚拟机搜索方法签名;
  3. 调用方法。

实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

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

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

二、遇到的问题:

动态绑定和

原文地址:https://www.cnblogs.com/zyljal/p/13352020.html