学习Java的第十一天------多态

≡放荡痞女 提交于 2019-12-18 15:40:27

多态

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. 拓宽方法的返回值范围

父类的引用指向子类的对象,或者接口的引用指向遵从接口的类对象,这就是多态!!!
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!