多态
一种事务,多种形态,称为多态
前提:
继承:必须存在继承关系
向上转型:将子类型的引用赋值给父类型对象
重写:子类重写父类方法
-
接口多态
InterfaceA interfaceA = new InterfaceAImpl();// 自动类型转换 InterfaceAImpl interfaceA1 = (InterfaceAImpl)interfaceA;// 向下转型(强转)
-
类的多态
// 父类型引用 指向 子类型对象 Object interfaceA = new InterfaceAImpl();// 自动类型转换 InterfaceAImpl interfaceA1 = (InterfaceAImpl)interfaceA;// 向下转型(强转)
编译时状态(编译器) = 运行时状态(JVM)
编译时状态:决定对象能调用的属性和方法
运行时状态:决定对象最终能调用那些方法(重写)
instanceof
引用 instanceof 子类型
判断 interfaceA 是不是 InterfaceAImpl 类型的引用
目的:为了防止出现类型转换异常
InterfaceA interfaceA = new InterfaceAImpl();
if (interfaceA instanceof InterfaceAImpl) {
InterfaceAImpl interfaceA1 = (InterfaceAImpl)interfaceA;
}
多态优点
类型统一、规范代码、代码的复用
例如:当一个父类有好多子类,这些子类都重写了父类的方法(这些方法是为了一个共同的目标,即同一个功能),这些子类重写这些方法是为了以各自的不同的方式实现这个目标即功能,当其他类的方法想要调用父类的方法但是并不想确定是以何种方式实现这个方法,那么只要让这个方法的形参类型是父类的类型,那么就可以使程序动态的使用不同方式实现这个功能(即传入不同的子类)。而不需要通过写多个方法去实现不同方式完成同一个功能。