1.多态的概念
多态是指程序中的同一引用类型,使用不同的实例而执行结果不同的。
同一个类型:一般指父类
不同的实例:不同的子类实例
执行结果不同:针对同一方法执行的结果不同
1 package cn.sxt05; 2 3 public class Test01 { 4 public static void main(String[] args) { 5 6 // 多态 7 // 同一引用类型 8 Pet pet = null; 9 // 父类引用 引用 子类对象 10 pet = new Dog("二狗",100,0,"土狗"); 11 // 呈现多态 12 pet.eat(); 13 14 pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE); 15 // 呈现多态 16 pet.eat(); 17 } 18 }
2.实现多态的步骤
[1] 编写父类
[2] 编写子类,子类一定要重写/实现父类的方法
[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())
3.多态的实现形式
[1]父类类型引用子类对象(本质)
如下代码所示,pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。
1 // 多态 2 // 同一引用类型 3 Pet pet = null; 4 // 父类引用 引用 子类对象 5 pet = new Dog("二狗",100,0,"土狗"); 6 // 呈现多态 7 pet.eat();
[2]父类作为方法形参实现多态
1 public void feed(Pet pet) { 2 System.out.println(this.getName() + "正在喂" + pet.getName()); 3 pet.eat(); 4 }
[3]父类作为方法的返回值实现多态
1 public Pet adoptPet(int type) { 2 Pet pet = null; 3 if(1 == type) { 4 pet = new Dog(); 5 }else if(2 == type) { 6 pet = new Penguin(); 7 }else if(3 == type){ 8 pet = new Cat(); 9 } 10 return pet; 11 }
4.多态类型转换
在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。
在引用数据类型转换过程中,自动类型转换也称向上类型转换,子类可以自动转换成父类。
1 Pet pet = null; 2 pet = new Dog();
强制类型转换也称向下类型转换,父类可以强制转换成子类。
子类类型 引用 = (子类)父类对象,如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型。
1 public void play(Pet pet) { 2 if(pet instanceof Dog) { 3 Dog dog = (Dog) pet; 4 dog.catchFlyDisc(); 5 }else if(pet instanceof Penguin) { 6 Penguin penguin = (Penguin) pet; 7 penguin.swimming(); 8 } 9 }