笔记本电脑(laptop)通常具备使用USB设备的功能。
在生产时,笔记本都预留了可以插入USB设备的USB接口,
但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。
定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,
那么鼠标和键盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。
分析: 进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘
①USB接口,包含打开设备功能、关闭设备功能。
②笔记本类,包含开机功能、关机功能、使用USB设备功能。
③鼠标类,要实现USB接口,并具备点击的方法。
④键盘类,要实现USB接口,具备敲击的方法。
//USB接口
package 电脑USB接口;
/**
* @Author: Jason
* @Date: 2019/8/14 22:57
* @Version 1.0
*/
public interface USB {
public abstract void open(); //打开设备
public abstract void close(); //关闭设备
}
//电脑类
public class Computer {
public void powerOn(){
System.out.println("电脑开机");
}
public void powerOff(){
System.out.println("电脑关机");
}
public void usbDevice(USB usb) {
usb.open(); //打开设备
usb.close(); //关闭设备
}
}
//鼠标就是一个USB设备
public class Mouse implements USB{
@Override
public void open() {
System.out.println("打开鼠标");
}
@Override
public void close() {
System.out.println("关闭鼠标");
}
}
//键盘就是一个USB设备
public class Keyboard implements USB{
@Override
public void open() {
System.out.println("打开键盘");
}
@Override
public void close() {
System.out.println("关闭键盘");
}
}
//测试类
public class DemoTest {
public static void main(String[] args) {
//首先创建一个笔记本
Computer computer = new Computer();
computer.powerOn();
/* //准备一个鼠标供电脑使用
Mouse mouse = new Mouse();
//首先进行向上转型,当作USB来用
USB usb = mouse;
*/
//或者用多态
USB usbMouse = new Mouse(); //左父右子 多态
//参数是USB类型,刚好传递进去的是USB鼠标
computer.usbDevice(usbMouse);
//创建一个键盘
Keyboard keyboard = new Keyboard(); //没有使用多态写法 无向上转型
//方法参数是USB类型,但传递进去的是一个实现对象
computer.usbDevice(keyboard); //这里本是USB类型 但keyboard可以 这里也自动发生了向上转型
// computer.usbDevice(new Keyboard()); //也可以
//实现类向上转型成为接口类型
computer.powerOff();
}
}
对于自动转型实例理解
package 电脑USB接口;
/**
* @Author: Jason
* @Date: 2019/8/15 0:24
* @Version 1.0
*/
public class 自动向上转型理解 {
public static void main(String[] args) {
method(10.10); //正确 double --> double
method(20); //正确 int --> double 自动转型
int a = 89;
method(a); //int --> double double范围大 自动向上转型
}
public static void method( double num){
System.out.println(num);
}
}
鼠标、键盘类的特有方法 使用向下转型
//鼠标就是一个USB设备
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("点击鼠标");
}
}
//键盘就是一个USB设备
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("键盘输入");
}
}
public class Computer {
public void powerOn(){
System.out.println("电脑开机");
}
public void powerOff(){
System.out.println("电脑关机");
}
public void usbDevice(USB usb) {
usb.open(); //打开设备
if(usb instanceof Mouse){ //必须先判断
Mouse mouse = (Mouse) usb; //鼠标特有方法 向下转型
mouse.click();
}else if(usb instanceof Keyboard){ //必须先判断
Keyboard keyboard = (Keyboard) usb; //键盘特有方法 向下转型
keyboard.type();
}
usb.close(); //关闭设备
}
}
添加完这几处 再运行测试类