多态的前提条件
1.有继承 / 实现关系
2.有方法重写
3.有父类引用指向子类对象
多态的成员访问特点
成员变量: 编译看左边(父类),执行看左边(父类)
成员方法: 编译看左边(父类),执行看右边(子类)
好处:提高了程序的扩展性
对象多态: 将方法的形参定义为父类类型,这个方法可以接收父类的任意子类对象
行为多态: 同一行为,具有多个不同表现形式或形态能力(即父类的方法根据接受的子类对象不同执行不同子类重写的方法)
public static void main(String[] args) {
useAnimal(new Dog());
useAnimal(new Cat());
}
public static void useAnimal(Animal a) {
// Animal a = new Dog();
// Animal a = new Cat();
a.eat();
}
弊端: 不能使用子类的特有成员(变量或方法),需要进行转型。
多态的转型
转型可能有的异常
ClassCastException: 引用类型变量对应的事件类型和目标类型不是同一种类型
orderService 接收的实例类型是 OverseasServiceImpl 经instanceof判断返回true,然后进行向下转型调用子类私有的方法。