Java基础--面向对象编程4(多态)

时间:2023-02-15 14:09:30

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     }