多态

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      }

 

posted @ 2019-04-23 22:37  小小穿梭机^^  阅读(139)  评论(0编辑  收藏  举报