笔记本电脑案例
首先创建一个电脑类
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) usb).click();//调用鼠标点击方法
} else if (usb instanceof Keyboard) {//判断
Keyboard keyboard = (Keyboard) usb;//向下转型
((Keyboard) usb).type();//调用键盘输入方法
}
usb.close();//关闭设备
}
}
这里新建USB接口
public interface USB {
public abstract void open();//打开设备
public abstract void 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();
//准备一个鼠标,供电脑使用
Mouse mouse = new Mouse();
//首先进行向上转型
USB usbMouse = new Mouse();//多态
//参数是USB类型,我正好传递进去的就是USB鼠标
computer.useDevice(usbMouse);
//准备一个键盘,供电脑使用
Keyboard keyboard = new Keyboard();//没有使用多态写法
//同样向上转型
USB usbKeyboard = new Keyboard();
//方法参数是USB类型,传递进去的是实现类对象
computer.useDevice(keyboard);//正确写法,也发生了向上转型
//使用子类对象,匿名对象也可以
// computer.useDevice(new Keyboard());//这也可以
//笔记本关机
computer.powerOff();
}
}
案例表明,当笔记本接收到USB接口的请求时,需要明白接入的是鼠标还是键盘,这时候需要向下转型,使用IF语句,判断类型从而调用私有化的方法。