(如有问题,欢迎各位大佬批评指正)
USB接口案例
分析:
- USB接口,包含打开设备功能和关闭设备功能
- 笔记本类,包含开机功能,关机功能,使用USB设备功能
- 鼠标类,实现USB接口,并具备点击方法
- 键盘类,实现USB接口,并具备敲击功能
图解:
- 根据分析首先创建一个USB接口
package md.day08.demo01;
public abstract interface USB {
//打开USB设备
public abstract void open();
//关闭设备
void close();
}
- 创建一个电脑类
package md.day08.demo01;
public class Computer {
//开机
public void powerOn() {
System.out.println("开机命令");
//使用USB设备
public void useUSB(USB usb) {
//打开设备
usb.open();
if (usb instanceof Mouse) {//先判断
((Mouse) usb).click();//向下转型
} else if (usb instanceof Keyboard) {//先判断
((Keyboard) usb).type();//向下转型
}
//关闭设备
usb.close();
}
//关机
public void powerOff() {
System.out.println("关机命令");
}
}
- 创建一个键盘类
package md.day08.demo01;
public class Keyboard implements USB {
@Override
public void open() {
System.out.println("打开键盘驱动");
}
@Override
public void close() {
System.out.println("关闭键盘驱动");
}
public void type() {
System.out.println("键盘输入");
}
}
创建一个鼠标类
package md.day08.demo01;
public class Mouse implements USB {
@Override
public void open() {
System.out.println("打开鼠标驱动");
}
@Override
public void close() {
System.out.println("关闭鼠标驱动");
}
public void click() {
System.out.println("鼠标点击");
}
}
最终实现:
package md.day08;
import md.day08.demo01.Computer;
import md.day08.demo01.Keyboard;
import md.day08.demo01.Mouse;
import md.day08.demo01.USB;
public class DemoMain {
public static void main(String[] args) {
//创建一个电脑类
Computer computer = new Computer();
computer.powerOn();
//创建一个鼠标类
USB usbMouse = new Mouse();
//使用鼠标
computer.useUSB(usbMouse);
//创建一个键盘类
Keyboard usbKeyboard = new Keyboard();
//使用键盘
computer.useUSB(usbKeyboard);
computer.powerOff();
}
}
注意:
在这里使用 computer 对象调用 useUSB 方法的时候,因为需要一个 USB 参数所以要发生向上转型。在这里我们创建 鼠标 对象的时候就是用的多态所以 鼠标 已经实现了向上转型,但是:这里键盘我们按照原始的创建对象的方法创建了 键盘 对象。为什么也可以直接作为参数传递进 useUSB 方法呢?
重点:
向上转型是可以发生自动转换的,可以理解为 int–>double 这种变量的自动类型转化。所以我们这里用原始的方法创建实现类的对象也是可以直接使用的。