java基础-多态

什么是多态?
字面意思:多种形态
父类中的方法在不同的子类中有不同的体现(实现),即同一条消息在不同的类中有不同的体现。

分三步去实现多态:1、父类引用指向子类对象,2、继承,3、方法重写

栗子1:
宠物类

package com.name.day_06;

/**
 * @author ***
 * @date 2020/9/14 15:34
 * @describe
 */
public class Pet {
    void eat(String food){}
}
class Dog extends Pet{
    @Override
    void eat(String food) {
        System.out.println("小狗再吃:"+food);
    }
}
class Cat extends Pet{
    @Override
    void eat(String food) {
        System.out.println("小猫再吃:"+food);
    }
}
class Mouse extends Pet{
    @Override
    void eat(String food) {
        System.out.println("小老鼠吃:"+food);
    }
}

主任类

public class Master {
    //主任喂养小狗
    void feed(Dog dog,String food){
        System.out.println("主任正在喂养");
        dog.eat(food);
    }
    //主任正在喂养小猫
    void feed(Cat cat,String food){
        System.out.println("主任正在喂养");
        cat.eat(food);
    }
    //主任正在喂养小老鼠
    void feed(Mouse mouse,String food){
        System.out.println("主任正在喂养");
        mouse.eat(food);
    }

测试类

public class Test {
    public static void main(String[] args) {
       //创建主任类对象
        Master master=new Master();
        //创建小狗的对象
        Dog dog=new Dog();
        master.feed(dog,"狗肉火锅");
        //创建小猫的对象
        Cat cat=new Cat();
        master.feed(cat,"好多鱼");
        //创建小老鼠的对象
        Mouse mouse=new Mouse();
        master.feed(mouse,"大米");
    }
}

分析
栗子1,没有使用多态,虽然语法没有什么问题,但是如果宠物类持续增加(继承父类),主任类就得跟着增加喂养的方法。不仅造成了代码的冗余,而且还容易出错。

这里提一下面向对象的设计原则:对扩展(新增功能)开发对修改(修改现有的功能)关闭。

栗子2:使用多态

宠物类

package com.name.day_06;

lic class Pet {
    void eat(String food){}
}
class Dog extends Pet{
    @Override
    void eat(String food) {
        System.out.println("小狗再吃:"+food);
    }
}
class Cat extends Pet{
    @Override
    void eat(String food) {
        System.out.println("小猫再吃:"+food);
    }
}
class Mouse extends Pet{
    @Override
    void eat(String food) {
        System.out.println("小老鼠吃:"+food);
    }
}

public class Master {

    void feed(Pet pet,String food){
        System.out.println("主人正在喂养");
        pet.eat(food);
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        //创建主任类对象
     	Master master=new Master();
     	//创建小狗的对象
     	Dog dog=new Dog();
        master.feed(dog,"狗肉火锅");
        //创建小猫的对象(父类引用指向子类对象)
        Pet cat=new Cat();
        master.feed(cat,"好多鱼");
        Pet pet=new Mouse();
        master.feed(pet,"大米");
    }
}

这样,无论添加多少个宠物子类,这个主任类不需要变动。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值