重学Java(032)—— Java基础知识(接口多态的综合案例)
程序员文章站
2024-03-02 12:52:10
...
这是一个运用到接口、多态、对象的向上转型和向下转型的例子。
我们要做的是描述一个笔记本类,实现笔记本使用USB鼠标和USB键盘。
分析:
- USB接口,包含开启功能、关闭功能
- 笔记本类,包含运行功能、关机功能、使用USB设备功能
- 鼠标类,要实现USB接口,并具备点击的方法
- 键盘类,要实现USB接口,具备敲击的方法
下面开始实现。
首先定义一个接口USB,接口主要用于打开设备和关闭设备:
public interface USB {
public abstract void open(); // 打开设备
public abstract void close(); // 关闭设备
}
然后定义两个USB设备,一个鼠标类,一个键盘类,它们都作为USB接口的实现类。
鼠标类:
// 鼠标就是一个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("键盘输入");
}
}
接着再定义一个笔记本电脑类,电脑要有开机关机的功能和使用USB设备的功能:
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(); // 关闭设备
}
}
最后定义一个测试类,来测试笔记本电脑的各项功能是否可以正常运行:
public class DemoMain {
public static void main(String[] args) {
// 首先创建一个笔记本电脑
Computer computer = new Computer();
computer.powerOn();
// 准备一个鼠标,供电脑使用
// Mouse mouse = new Mouse();
// 向上转型
USB usbMouse = new Mouse(); // 多态写法
// 参数是USB类型,我正好传递进去的就是USB鼠标
computer.useDevice(usbMouse);
// 创建一个USB键盘
Keyboard keyboard = new Keyboard(); // 没有使用多态写法
// 方法参数是USB类型,传递进去的是实现类对象
computer.useDevice(keyboard); // 正确写法,也发生了向上转型
// 使用子类对象匿名对象
// computer.useDevice(new Keyboard()); // 也是正确写法
computer.powerOff();
}
}
测试类的运行结果如图所示: