此案例包含了接口,多态,是综合运用,需要熟练掌握
首先是电脑类
Computer
package Demo07;
public class Computer {
public void powerOn(){
System.out.println("笔记本电脑开机");
}
public void powerOff(){
System.out.println("笔记本电脑关机");
}
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.text();
}
usb.close();
}
}
然后是USB接口
package Demo07;
public interface USB {
public abstract void open();
public abstract void close();
}
鼠标:
package Demo07;
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("点爆鼠标");
}
}
键盘:
package Demo07;
public class Keyboard implements USB{
@Override
public void open() {
System.out.println("打开键盘");
}
@Override
public void close() {
System.out.println("关闭键盘");
}
public void text(){
System.out.println("敲碎键盘");
}
}
Main方法:
package Demo07;
import javax.security.auth.kerberos.KerberosTicket;
import java.security.Key;
public class Demo07Main {
public static void main(String[] args) {
Computer computer= new Computer();
computer.powerOn();
USB usb = new Mouse();
computer.useDevice(usb);
System.out.println("===================");
Keyboard keyboard = new Keyboard();
computer.useDevice(keyboard);
computer.powerOff();
}
}
运行结果:
需要注意的是:
1、鼠标类和键盘类是USB接口的实现类,与Computer没有直接关系,别忘了implements
2、在Computer类中调用useDevice方法的时候,由于参数是USB类的,不确定是鼠标还是键盘,所以要用instanceof判断,就是这样:
if(usb instanceof Mouse){//如果是鼠标类
Mouse mouse = (Mouse) usb;
mouse.click();
}else if(usb instanceof Keyboard){//如果是键盘类
Keyboard keyboard = (Keyboard) usb;
keyboard.text();
}
注意上面不要用if然后直接else,因为可能不止有鼠标和键盘,有可能还有优盘啊打印机什么的,所以为了严谨,用else if语句
3、下面的代码,创建了一个Keyboard的对象,不过useDevice传入的应该是USB类型的对象,这里面发生了类型转换,从小到大的类型转换
Keyboard keyboard = new Keyboard();
computer.useDevice(keyboard);
其实等价于
这里面发生了int -> double 的类型转换,从小转到大,可以的