![]()
1 public interface USB {
2
3 public abstract void open(); // 打开设备
4
5 public abstract void close(); // 关闭设备
6
7 }
1 // 鼠标就是一个USB设备
2 public class Mouse implements USB {
3 @Override
4 public void open() {
5 System.out.println("打开鼠标");
6 }
7
8 @Override
9 public void close() {
10 System.out.println("关闭鼠标");
11 }
12
13 public void click() {
14 System.out.println("鼠标点击");
15 }
16 }
1 // 键盘就是一个USB设备
2 public class Keyboard implements USB {
3 @Override
4 public void open() {
5 System.out.println("打开键盘");
6 }
7
8 @Override
9 public void close() {
10 System.out.println("关闭键盘");
11 }
12
13 public void type() {
14 System.out.println("键盘输入");
15 }
16 }
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(); // 关闭设备
}
}
1 public class DemoMain {
2
3 public static void main(String[] args) {
4 // 首先创建一个笔记本电脑
5 Computer computer = new Computer();
6 computer.powerOn();
7
8 // 准备一个鼠标,供电脑使用
9 // Mouse mouse = new Mouse();
10 // 首先进行向上转型
11 USB usbMouse = new Mouse(); // 多态写法
12 // 参数是USB类型,我正好传递进去的就是USB鼠标
13 computer.useDevice(usbMouse);
14
15 // 创建一个USB键盘
16 Keyboard keyboard = new Keyboard(); // 没有使用多态写法
17 // 方法参数是USB类型,传递进去的是实现类对象
18 computer.useDevice(keyboard); // 正确写法!也发生了向上转型
19 // 使用子类对象,匿名对象,也可以
20 // computer.useDevice(new Keyboard()); // 也是正确写法
21
22 computer.powerOff();
23 System.out.println("==================");
24
25 method(10.0); // 正确写法,double --> double
26 method(20); // 正确写法,int --> double
27 int a = 30;
28 method(a); // 正确写法,int --> double
29 }
30
31 public static void method(double num) {
32 System.out.println(num);
33 }
34
35 }