案例2:笔记本USB接口 题目要求:USB接口,包含打开设备功能,关闭设备功能。 笔记本类:包含开机功能,关机功能,使用USB设备。 鼠标类:实现USB接口,并具备点击的方法。 键盘类:实现USB接口,并具备敲击的方法。
main函数如下:
public static void main(String[] args) {
Laptop laptop = new Laptop();//新建一个笔记本类
Keyboard keyboard = new Keyboard();//新建一个键盘类
laptop.On();
laptop.UseUsb(keyboard);//传递进去的接口的实现类new的对象
USB usb = new Mouse();//多态写法,左边是接口,右边是实现类
laptop.UseUsb(usb);//传递进去的是usb
laptop.Off();
}
接口USB:
public interface USB {
public default void Open(){
System.out.println("开启设备");
}
public default void Close(){
System.out.println("关闭设备");
}
}
这里如果是abstract抽象方法,也是可行的,但接口中如果是抽象方法,实现类必须覆盖重写。
笔记本类:
public class Laptop {
public void On(){
System.out.println("开机");
}
public void Off(){
System.out.println("关机");
}
public void UseUsb(USB usb){
//添加一个判断功能
//System.out.println("开始使用USB设备");
usb.Open();
if(usb instanceof Mouse){//instanceof 判断向上转型的父类对象,原来是什么自类
Mouse mouse = (Mouse) usb;//向下转型,所以在向下转型前要判断一下是否是这个自类
mouse.Clicking();
}
if(usb instanceof Keyboard){//instanceof 判断向上转型的父类对象,原来是什么自类
Keyboard keyboard = (Keyboard) usb;//向下转型,所以在向下转型前要判断一下是否是这个自类
keyboard.Knocking();
}
usb.Close();
}
}
鼠标类:
public class Mouse implements USB {
@Override
public void Open(){
System.out.println("打开鼠标");
}
@Override
public void Close(){
System.out.println("关闭鼠标");
}
public void Clicking(){
System.out.println("点击鼠标");
}
}
键盘类:
public class Keyboard implements USB {
@Override
public void Open(){
System.out.println("打开键盘");
}
@Override
public void Close(){
System.out.println("关闭键盘");
}
public void Knocking(){
System.out.println("敲击键盘");
}
}