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();//笔记本电脑关机 } } /* 笔记本电脑开机 打开鼠标 鼠标点击 关闭鼠标 打开键盘 键盘输入 关闭键盘 笔记本电脑关机 */
来源:https://www.cnblogs.com/deer-cen/p/12248593.html