理解多态性
可以理解为一个事物的多种形态。
何为多态性
Java引用变量的类型:编译时类型和运行时类型,编译时和运行时类型不一致就会产生产生多态。
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)。
方法与对象的多态性
- 方法的多态性:重载与覆写
重载:同一个方法名,根据不同的参数类型及个数可以完成不同的功能
覆写:同一个方法,根据实例化的子类对象不同,所完成的功能也不同 - 对象的多态性:父子类对象的转换
向上转型:子类对象变为父类对象,格式:父类 父类对象 = 子类实例,自动转换
向下转型:父类对象变为子类对象,格式:子类 子类对象 = (子类) 父类实例,强制转换
向下转型的前提条件:必须发生向上转型后才可以放生向下转型
instanceof关键字
- a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false
- 使用情景:为了避免在向下转型时出现ClassCastException的异常,在转型之前,先进行instanceof判断,一旦返回true,就进行向下转型;如果返回false,不进行向下转型。
- 如果a instanceof A返回true,a instanceof B也返回true,则类B是类A的父类。
多态的作用
- 向上转型:其目的是参数的统一,但是向上转型中,通过子类实例化后的父类对象所能调用的方法只能是父类中定义过的方法。
- 向下转型:其目的是父类对象要调用实例化它的子类中的特殊方法,但是向下转型是需要强制转换的,这样的操作容易带来安全隐患