什么是多态?
同样的一种物质,在不同条件下,所呈现出来的状态是不同的;同一个引用类型,使用不同的实例而执行不同操作
多态存在的必要条件
1.要有继承;
2.要有重写;
3.父类引用指向子类对象
语法
父类名 父类引用 = new 子类类名();
例: 类名 引用 = new 子类类名(); Pet pet = new Dog(); Pet pet = new Cat(); Pet pet = new Penguin();
如果父类和子类有相同的方法,那我们调用执行的的是子类中的方法,如果调用的都是子类中的方法,那我们可以把父类中的方法设置成抽象方法,用sbstarct修饰
实现多态的两种形式
1.使用父类作为方法形参实现多态
2.使用父类作为方法返回值实现多态
父类到子类的转换
向下转型(强制类型转换)
语法:对象 instanceof 类或接口(instanceof通常和强制类型转换结合使用)
例: public class Master { public void play(Pet pet){ if (pet instanceof Dog) { //如果传入的是狗狗 Dog dog = (Dog) pet; dog.catchingFlyDisc(); }else if (pet instanceof Penguin) { //如果传入的是企鹅 Penguin pgn = (Penguin) pet; pgn.swimming(); } } }
如果想调用子类特有的方法,需要先判断是否为同一种类型,向下转型
使用多态的好处
可以提高代码的复用性,解耦合