Java 的多态

释放双眼,带上耳机,听听看~!

1    多态的概念

 多态(?)

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

Java 的多态

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

 

程序中的多态

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

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

不同:不同的子类实例

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

 

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();
        }
    }

 

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

记一次重大生产事故,在那 0.1s 我想辞职不干了!

2020-11-9 4:34:01

随笔日记

86万亿元债市开放提速 外资流入提升空间较大

2020-11-9 4:34:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索