1 案例
2 案例分析
3 代码实现
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("笔记本电脑关机");
}
//使用usb设备方法,使用接口作为方法的参数
public void useDevice(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();//关闭设备
}
}
//鼠标就是一种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 DemoMain {
public static void main(String[] args) {
//首先创建一个笔记本电脑
Computer computer = new Computer();
computer.powerOn();//笔记本电脑开机
//1.
// Mouse mouse = new Mouse();
// USB usb = mouse;
//首先进行向上转型 准备一个鼠标供电脑使用
//上两行代码可以改写为
USB usbMouse = new Mouse();//多太写法
//参数要求USB类型,我传递进去的正好就是USB鼠标
computer.useDevice(usbMouse);
//2.
//创建一个usb键盘
Keyboard keyboard = new Keyboard();
//方法参数是USB类型,传递进去的是实现类对象
computer.useDevice(keyboard);//正确写法 向上类型转换 类型与数据类型里的自动类型转换
//使用子类对象、匿名对象也可以
//computer.useDevice(new Keyboard());//也是正确写法
computer.powerOff();//笔记本电脑关机
}
}
/*
笔记本电脑开机
打开鼠标
鼠标点击
关闭鼠标
打开键盘
键盘输入
关闭键盘
笔记本电脑关机
*/