天天看點

接口多态的綜合案例筆記本電腦案例分析

筆記本電腦

筆記本電腦( laptop)通常具備使用USB裝置的功能。在生産時,筆記本都預留了可以插入USB裝置的USB接口,但具體是什麼USB裝置,筆記本廠商并不關心,隻要符合USB規格的裝置都可以。

定義USB接口,具備最基本的開啟功能和關閉功能。滑鼠和鍵盤要想能在電腦上使用,那麼滑鼠和鍵盤也必須遵守

USB規範,實作USB接口,否則滑鼠和鍵盤的生産出來也無法使用。

案例分析

進行描述筆記本類,實作筆記本使用USB滑鼠、USB鍵盤

  • USB 接口,包含開啟功能、關閉功能
  • 筆記本類,包含運作功能、關機功能、使用 USB裝置功能
  • 滑鼠類,要實作 USB接口,并具備點選的方法
  • 鍵盤類,要實作 USB接口,具備敲擊的方法

定義USB接口:

public interface USB {
    public abstract void open();//打開裝置

    public abstract void close();//關閉裝置
}

           

定義滑鼠類:

public class Mouse implements USB {

    @Override
    public void open() {
        System.out.println("打開滑鼠!");
    }

    @Override
    public void close() {
        System.out.println("關閉滑鼠!");
    }

    public void onClick(){
        System.out.println("點選滑鼠!");
    }
}
           

定義鍵盤類:

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 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.onClick();
            }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.powerOff();
    }
}