利用多态,简易实现电脑usb连接设备案例

package cn.learn.Practice03;

public interface UsbInterface {
    void open();  //打开usb
    void close(); //关闭usb
}
package cn.learn.Practice03;

public class Keyboard implements UsbInterface {
    @Override
    public void open() {
        System.out.println("打开键盘连接");
    }

    @Override
    public void close() {
        System.out.println("关闭键盘");
    }
    public void type(){
        System.out.println("键盘输入文字");
    }
}
package cn.learn.Practice03;

public class Mouse implements UsbInterface {
    @Override
    public void open() {
        System.out.println("打开鼠标连接");
    }

    @Override
    public void close() {
        System.out.println("关闭鼠标");
    }

    public void click(){
        System.out.println("鼠标点击");
    }
}
package cn.learn.Practice03;

public class LapTop {

    public void powerOn(){
        System.out.println("笔记本开机");
    }
    public void powerOff(){
        System.out.println("笔记本关机");
    }

    //电脑使用usb,接口作为参数列表
    public void useDevice(UsbInterface usb){
        usb.open();  //实际调用的是鼠标或者键盘的open方法

        //如果传入的是Mouse,则将参数向下转型,进行点击
        if(usb instanceof Mouse){
            //参数转型
            Mouse m = (Mouse) usb;
            //进行点击
            m.click();
        }
        //如果传入的是Keyboard,则将参数向下转型,进行点击
        if(usb instanceof Keyboard){
            //参数转型
            Keyboard k = (Keyboard) usb;
            //进行打字
            k.type();
        }

        usb.close(); //关闭设备
    }
}
 1 package cn.learn.Practice03;
 2 
 3 public class Enter {
 4     public static void main(String[] args) {
 5         //首先创建一个笔记本电脑
 6         LapTop one = new LapTop();
 7         one.powerOn();
 8 
 9 
10         //准备一个鼠标
11         Mouse mouse = new Mouse();
12 
13         //mouse.open();  接口也有该方法,重名,编译通过,运行在右子类优先
14         /*
15 
16         ??正确写法,看似传入的是一个对象,实际是实现类,自动向上转型
17         eg:int a=10;method(a);参数列表是double
18         不恰当的可以把Mouse 看作 int
19         甚至可以这么写one.useDevice(new mouse()); -匿名对象生成
20         自动转型为Mouse实现类,传递给useDevice(UsbInterface usb);
21 
22          */
23         //调用电脑使用鼠标
24         one.useDevice(mouse);//触发click方法
25 
26         //另一种写法,准备一个键盘,向上转型
27         UsbInterface keyboard= new Keyboard();
28         //keyboard.open();    接口也有该方法,重名,编译通过,运行在右子类优先
29         //((Keyboard) keyboard).type();  不能使用自己的单独方法与上面对比
30         //调用电脑使用键盘
31         one.useDevice(keyboard);
32 
33 
34         one.powerOff();
35     }
36 
37 }

猜你喜欢

转载自www.cnblogs.com/huxiaobai/p/11470310.html