Java的学习记录——关于多态

目标:

        清楚多态的含义及运用

内容:

        当我们不确定一个引用变量到底会指向哪个类的实例对象、此变量发出的方法调用是否为我们指定的某个类中的方法。如果将变量绑定到各种不同的类实现上,可以使得让程序自己选择运行状态,即为多态

        简单来说,比如我想吃水果,那么不管我是吃葡萄,还是吃西瓜,都是吃水果。

特点:

  • 多态的前提:是继承、并且要有方法的重写
  • 父类引用指向子类对象,如:Animal a = new Cat();

 实例:

        假如我们需要写一个模拟养宠物的功能

//宠物类
public abstract class Pet {
        private String name;//名字
        private int health; //健康值
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getHealth() {
        return health;
    }
    public void setHealth(int health) {
        this.health = health;
    }
    //吃东西的方法
    public abstract void eat();
}
//小猫类
public class Cat extends Pet{
    //重写父类吃东西的方法
    public void eat(){
        //健康值加10
        this.setHealth(this.getHealth()+10);
        System.out.println("鱼很好吃,健康值+10");
    }
}
//小狗类
public class Dog extends Pet {
    //重写父类的吃东西的方法
    public void eat(){
        //健康值加15
        this.setHealth(this.getHealth()+15);
        System.out.println("汪汪汪~骨头不错哦,健康值+15");
    }
}
//主人类
public class Lady {
        private String name;//名字
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //构造方法
    public Lady(String name) {
        this.name = name;
    }
    //养猫的方法
    public void feedCat(Cat cat){
        cat.eat();
    }
    //养狗的方法
    public void feedDog(Dog dog){
        dog.eat();
    }
}

当我们使用继承写完Pet类之后会发现,主人类中feedCat方法和feedDog方法似乎是一样的,这时候就体现出多态的优化性,下面使用多态进行优化

//主人类
public class Lady {
        private String name;//名字
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //构造方法
    public Lady(String name) {
        this.name = name;
    }
    //养宠物的方法
    //以父类作为方法的参数,实现多态
    public void feed(Pet pet){
    pet.eat();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //创建一个小主人
        Lady l1 = new Lady("lily");

        //创建两个宠物,属于小主人的宠物
        Dog d = new Dog();
        d.setName("大黄");
        d.setHealth(60);

        Cat c = new Cat();
        c.setName("蓝猫");
        c.setHealth(50);

        //小主人喂养小狗
        l1.feed(d);
        //小主人喂养小猫
        l1.feed(c);
    }
}

可以看出,如果有后续添加宠物类型的话,只需要编写继承即可,主人类只需要使用feed()方法可以直接让程序自己寻找到对应的宠物类型。

总结:

        1、多态增加了可维护性,使得在不改变原有代码的基础上可以新增子类,拓展功能;

        2、多态能够动态确认对象的类型,提高了代码的灵活性;

        3、多态可以实现代码重用,将相似功能写在一起,让子类能够复用,大幅度减少了代码的重复性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦雨Chili

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值