Java属于OOP语言,也就是面向对象的语言,在面向对象语言中有三大特性,也就是封装、继承和多态,也有的面向对象语言是四大特性,就是封装、继承、多态和抽象。今天就来讲一讲其中的一大特性,也就是多态。




引用同一个文件夹的java_引用同一个文件夹的java


面向对象的Polymorphic,被翻译为多态,也就是多种状态,具体的讲就是同一个行为具有多个不同表现形式或形态的能力,在Java语言中对应的就是同一个类的同一个方法,会有多种不同的实现方式和计算结果,不过这是有前提条件的。

所谓的前提条件,说的专业一些,就是Java多态的实现机制,就是父类或接口定义的引用变量可以指向子类或实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。总结起来就是多态存在的三个必要条件:继承、重写和父类引用指向子类对象。继承就是子类拥有了父类的所有能力,重写就是子类对父类中的能力有所改造或增强,父类引用指向子类对象就可以利用多态的机制进行方法的调用。

多态在本质上可以分为两种:编译时多态和运行时多态,编译时多态就是在我们编写好我们的.java文件后,被编译器编译成.class文件时就已经确定的,也就是我们提前告知了程序在运行期需要调用哪个子类的方法,这种编译时多态在实际的应用意义不大。还有一种就是运行时多态,就时程序加载字节码后在运行时,才确定调用的是哪个子类的方法,通常所说的多态就是指运行时多态。


引用同一个文件夹的java_父类引用指向子类对象_02


多态存在的三个必要条件说的继承,也包括实现接口,可就是多态实现的方式有两种:子类继承父类(public class Son extends Father),还有就是规定一个接口,类去实现这个接口(public class Bird implements Fly)。还有就是要想使用多态,那么在声明对象时要遵循一条法则:声明的总是父类类型或接口类型。也就是 Father fa = new Son(),或者Fly f = new Bird(),这样才能使用到多态。在定义方法参数时也应该如此。就像Spring当中@Autowired的使用,可以结合这个自动注入更好的理解多态这一特性。


引用同一个文件夹的java_引用同一个文件夹的java_03