一、多态是什么?
- 多态是同一个行为具有不同的表现形式或形态的能力。
- 同一方法可以根据发送对象的不同而采用不同的行为方式。
例如:打印机分为黑白打印机和彩色打印机,在黑白打印机情况下打出来为黑白,在彩色打印机情况下打印出来为彩色。
多态就是事物的多种形态,一个对象在不同条件下所表现的不同形式。
二、多态的存在条件
多态存在的三个必要条件:
①继承或实现:在多态中必须存在有继承或实现关系的子类和父类。
②方法的重写:子类对父类中的某些方法进行重新定义(重写,使用@Override注解进行重写)。
③基类引用指向派生类对象,即父类引用指向子类对象,父类类型:指子类对象继承的父类类型,或实现的父接口类型。
三、多态的特点
1、多态中,编译看左边(静态绑定),运行看右边(动态绑定)
①静态绑定:在编译阶段能够确定方法在内存什么位置的就叫静态绑定,当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译不通过;如果有,编译通过。
② 动态绑定:在运行阶段,父类对象类型在堆内存中创建的实际对象是子类对象,所以jvm会根据内存中真实的对象引用重新去给父类的方法表索引项赋值,这种通过程序运行过程动态创建对象方法表的定位方法的方式,一般称之为动态绑定。
2、向上转型和向下转型
①向上转型: 子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象看成父类对象。此处父类对象可以是接口。
②向下转型:与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。