一个多态案例


需求:

使用面向对象编程模拟:设计一个电脑对象,可以安装2个USB设备

  • 鼠标:被安装时可以完成接入、调用点击功能、拔出功能。
  • 键盘:被安装时可以完成接入、调用打字功能、拔出功能。

分析

  1. 定义一个USB的接口(申明USB设备的规范必须是:可以接入和拔出)
  2. 提供2个USB实现类代表鼠标和键盘,让其实现USB接口,并分别定义独有功能。
  3. 创建电脑对象,创建2个USB实现类对象,分别安装到电脑中并触发功能的执行。

创建USB接口

public interface USB {
    /**
     * 接入
     */
    void connect();

    /**
     * 拔出
     */
    void unconnected();
}

创建键盘类

public class Keyboard implements USB {
    private String name;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void connect() {
        System.out.println(name + "接入电脑");
    }

    @Override
    public void unconnected() {
        System.out.println(name + "从电脑拔出");
    }

    public void keyDown() {
        System.out.println(name + "敲键盘了");
    }
}

创建鼠标类

public class Mouse implements USB {
    private String name;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void connect() {
        System.out.println(name + "接入电脑");
    }

    @Override
    public void unconnected() {
        System.out.println(name + "从电脑拔出");
    }

    public void dbClick() {
        System.out.println(name + "双击了");
    }
}

创建电脑类

public class Computer {
    private String name;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void installUSB(USB usb) {
        //usb可能是键盘也可能是鼠标,这里使用多态
        usb.connect();
        //独有功能先判断再强转
        if (usb instanceof Keyboard) {
            Keyboard k = (Keyboard) usb;
            k.keyDown();
        } else if (usb instanceof Mouse) {
            Mouse m = (Mouse) usb;
            m.dbClick();
        }

        usb.unconnected();
    }

    public void start() {
        System.out.println("开机");
    }
}

创建测试类

public class Test {
    public static void main(String[] args) {
        //创建电脑对象
        Computer c = new Computer("外星人");
        c.start();
        //创建usb设备
        USB u1 = new Keyboard("机械键盘");
        c.installUSB(u1);
        USB u2 = new Mouse("机械鼠标");
        c.installUSB(u2);
    }
}

测试结果

测试结果


文章作者: 泷少
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 泷少 !
评论
  目录