Java 的多态

1    多态的概念

 多态(?)

 可以理解为多种状态/多种形态

同一事物,由于条件不同,产生的结果不同

 

程序中的多态

同一引用类型,使用不同的实例执行结果不同的。

:同一个类型,一般指父类。

不同:不同的子类实例

不同:针对同一方法执行的结果不同

package cn.sxt05;

public class Test01 {
    public static void main(String[] args) {
        
        // 多态
        // 同一引用类型
        Pet pet = null;
        // 父类引用 引用 子类对象
        pet = new Dog("二狗",100,0,"土狗");
        // 呈现多态
        pet.eat();
        
        pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);
        // 呈现多态
        pet.eat();
    }
}

实现多态的步骤

[1] 编写父类

[2] 编写子类,子类一定要重写/实现父类的方法

[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())

1。2   多态的实现形式

// 多态
// 同一引用类型
Pet pet = null;
// 父类引用 引用 子类对象
pet = new Dog("二狗",100,0,"土狗");
// 呈现多态
pet.eat();

pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是子类对象重写/实现eat方法。

   父类作为方法形参实现多态

public void feed(Pet pet) {
        System.out.println(this.getName() + "正在喂" + pet.getName());
        pet.eat();
    }

父类作为方法的返回值实现多态

public Pet adoptPet(int type) {
        Pet pet = null;
        if(1 == type) {
            pet = new Dog();
        }else if(2 == type) {
            pet = new Penguin();
        }else if(3 == type){
            pet = new Cat();
        }
        return pet;
    }

1.3 类型转换

多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换

引用数据类型转换过程中,

自动类型转换也称向上类型转换。子类可以自动转换成父类。

Pet pet = null;
pet = new Dog();

强制类型转换也称下类型转换父类可以强制转换成子类。

一般而言,需要判断父类对象的真实类型instanceof关键字

如果要调用子类特有的方法,一定要强制类型转换,通过instanceof鉴别具体类型

public void play(Pet pet) {
        if(pet instanceof Dog) {
            Dog dog = (Dog) pet;
            dog.catchFlyDisc();
        }else if(pet instanceof Penguin) {
            Penguin penguin = (Penguin) pet;
            penguin.swimming();
        }
    }

猜你喜欢

转载自www.cnblogs.com/FSY15767366954/p/10759857.html