多态
1.1 多态
软件设计原则—开闭原则
对拓展开放,对修改关闭。
为什么要使用多态?
对系统进行业务拓展,增加系统的可维护性。
1.1.1 多态的概念
多态可以理解为多种状态/多种形态
|
同一份文档,由于使用的打印机不同,产生的结果不同
同一事物,由于条件不同,产生的结果不同
程序中的多态
同一引用类型,使用不同的实例而执行结果不同的。
同:同一个类型,一般指父类。
不同:不同的子类实例
不同:针对同一方法执行的结果不同
1 package cn.sxt05; 2 3 4 5 public class Test01 { 6 7 public static void main(String[] args) { 8 9 10 11 // 多态 12 13 // 同一引用类型 14 15 Pet pet = null; 16 17 // 父类引用 引用 子类对象 18 19 pet = new Dog("二狗",100,0,"土狗"); 20 21 // 呈现多态 22 23 pet.eat(); 24 25 26 27 pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE); 28 29 // 呈现多态 30 31 pet.eat(); 32 33 } 34 35 }
实现多态的步骤
[1] 编写父类
[2] 编写子类,子类一定要重写/实现父类的方法
[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())
1.1.2 多态的实现形式
[1] 父类类型 引用 子类对象(本质)
多态 // 同一引用类型 Pet pet = null; // 父类引用 引用 子类对象 pet = new Dog("二狗",100,0,"土狗"); // 呈现多态 pet.eat();
pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。
[2] 父类作为方法形参实现多态
public void feed(Pet pet) { System.out.println(this.getName() + "正在喂" + pet.getName()); pet.eat(); }
[3] 父类作为方法的返回值实现多态
1 public Pet adoptPet(int type) { 2 3 Pet pet = null; 4 5 if(1 == type) { 6 7 pet = new Dog(); 8 9 }else if(2 == type) { 10 11 pet = new Penguin(); 12 13 }else if(3 == type){ 14 15 pet = new Cat(); 16 17 } 18 19 return pet; 20 21 }