浅谈Java中的多态

多态

1. 多态
package com.qfedu.a;

// 动物类
class Animal {

}

// 狗类,狗是一种动物
class Dog extends Animal {

}

// 单身狗,也是一种动物
class SingleDog extends Animal {

}

// 程序猿,也是一种动物
class CodingMonkey extends Animal {

}

public class Demo1 {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = new Dog();
        SingleDog singleDog = new SingleDog();
        CodingMonkey codingMonkey = new CodingMonkey();

        teachAnimal(animal);
        // dog类对象是动物类对象
        teachAnimal(dog);
        // singleDog类对象也是动物对象
        teachAnimal(singleDog);
        // codingMonkey类对象同样也是动物对象
        teachAnimal(codingMonkey);
    }

    /**
     * 该方法需要的类对象是一个Animal类对象
     *
     * @param animal 这里是一个Animal类对象
     */
    public static void teachAnimal(Animal animal) {
        System.out.println(animal.getClass() + "来上课了~~~");
    }

    /**
     * 这里是获取一个动物类对象的方法
     *
     * @return Animal类对象
     */
    public static Animal getAnimal() {
        // return new Dog(); Dog是动物
        // return new SingleDog(); SingleDog也是动物
        // return new CodingMonkey(); CodingMonkey还是动物
        return new Animal();
    }
}
package com.qfedu.a;

interface USB {
    /**
     * 该方法是要求所有的USB设备必须完成的方法
     */
    void connect();
}

/**
 * 鼠标类是USB接口的实现类,同时也是USB设备
 */
class Mouse implements USB {
    @Override
    public void connect() {
        System.out.println("鼠标拖来拖去~~~");
    }
}

/**
 * 这是Logi类,继承Mouse类,同时也是一个USB设备
 */
class Logi extends Mouse {
    @Override
    public void connect() {
        System.out.println("Logi MX Master 2s");
    }
}

/**
 * 键盘类是USB接口的实现类,同时也是USB设备
 */
class Keyboard implements USB {

    @Override
    public void connect() {
        System.out.println("键盘噼里啪啦~~~");
    }
}

/**
 * Filco类,继承Keyboard类,同时也是一个USB设备
 * HHKB
 */
class Filco extends Keyboard {
    @Override
    public void connect() {
        System.out.println("Filco 87 双模黑色 1099 RMB");
    }
}

/**
 * 电脑类,需要使用USB接口
 */
class PC {
    /**
     * 使用USB接口方法
     *
     * @param usb 这里是一个USB接口,需要连接的是USB设备
     */
    public void useUSBInterface(USB usb) {
        usb.connect();
    }
}

public class Demo2 {
    public static void main(String[] args) {
        PC pc = new PC();

        // USB设备类对象
        Mouse mouse = new Mouse();
        Keyboard keyboard = new Keyboard();

        // 这里需要连接USB设备,传入一个USB设备鼠标类对象
        pc.useUSBInterface(mouse);

        // 这里需要连接USB设备,传入一个USB设备键盘类对象
        pc.useUSBInterface(keyboard);

        /*
         这里需要一个USB设备,传入的是一个Logi的匿名类对象,同时也是间接实现了USB接口
         是一个USB设备
        */
        pc.useUSBInterface(new Logi());

        /*
         这里需要一个USB设备,传入的是一个Filco的匿名类对象,同时也是间接实现了USB接口
         是一个USB设备
         */
        pc.useUSBInterface(new Filco());
    }

}
【总结多态作用】
1. 拓宽方法的参数范围
2. 拓宽方法的返回值范围

父类的引用指向子类的对象,或者接口的引用指向遵从接口的类对象,这就是多态!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值