Java学习之多态二

目录

一、运用多态解决宠物喂食问题

原理分析

运行测试

运行结果

 分析

增加宠物和食物种类

Pig类

Rice类

测试

运行结果


一、运用多态解决宠物喂食问题

改变Master类的feed方法的参数列表

package com.hspedu.poly_;

public class Master {
    private String name;

    public Master(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void feed(Animal animal, Food food){
       System.out.println("主人" + name + "给"+ animal.getName() + "喂" + 
                food.getName());
    }

}

原理分析

1)animal的编译类型是Animal,可以指向(接收)Animal子类的对象

2)food的编译类型是Food,可以指向(接收)Food子类的对象

运行测试

在Poly01.java中测试,为了区分加~

package com.hspedu.poly_;

public class Poly01 {
    public static void main(String[] args) {
        Master master = new Master("小李");
        Dog spike = new Dog("Spike~");
        Bone bone = new Bone("大骨头~");
        
        master.feed(spike,bone);
        Cat tom = new Cat("Tom~");
        Fish fish = new Fish("鱼罐头~");
        master.feed(tom,fish);
    }
}

运行结果

 分析

因为spike是Dog类的对象,Dog类是Animal的子类,Animal可以接收子类的对象的传参;bone传参的原理也是如此

增加宠物和食物种类

增加宠物Pig类继承Aniaml类,增加食物Rice类,继承Food类,别的都不需要,在Poly01中直接创建新对象然后调用feed方法即可,这就是多态的便利

Pig类

package com.hspedu.poly_;

public class Pig extends Animal{
    public Pig(String name) {
        super(name);
    }
}

Rice类

package com.hspedu.poly_;

public class Rice extends Food{
    public Rice(String name) {
        super(name);
    }
}

测试

package com.hspedu.poly_;

public class Poly01 {
    public static void main(String[] args) {
        Master master = new Master("小李");
        Dog spike = new Dog("Spike~");
        Bone bone = new Bone("大骨头~");
        master.feed(spike,bone);

        Cat tom = new Cat("Tom~");
        Fish fish = new Fish("鱼罐头~");
        System.out.println("===============");
        master.feed(tom,fish);

        Pig pig = new Pig("猪猪侠");
        Rice rice = new Rice("八宝饭");
        System.out.println("============");
        master.feed(pig,rice);

    }
}

运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值