Java 的多态

Posted fsy15767366954

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
        }
    }

 

以上是关于Java 的多态的主要内容,如果未能解决你的问题,请参考以下文章

每个人单核苷酸多态性(SNP)形成的原因是啥?

多态性和动态铸造

Java多态——代码复用性

Java 多态

java多态/重载方法——一个疑难代码引发的讨论

Java 多态