接口、多态、类型转换的综合小练习(3.9)

需求:

        面向对象思想设计一个电脑对象,可以使用鼠标和键盘。鼠标、键盘要求实现USB接口,实现接入、拔出功能,并具备独有功能 。鼠标有单击功能( click ),键盘有输入功能(input) 。

思路:

        这个可以先写一个interface(接口)USB,里面定义两个抽象方法(public abstract自动省略),然后再分别写两个实现类键盘KeyBoard和鼠标Mouse。在里面重写连接、断开方法,并且重写自己的独有的方法。

        然后因为新建接口的实现类对象,还不能使用KeyBoard和Mouse这两个实现类的独有方法。因此需要再写一个Computer类,里面传参面向接口的对象,然后用instanceof判断数据类型,若为KeyBoard和Mouse,则强转并使用里面的独有方法。

        在测试类中使用多态的特性,前面写接口后面写实现类,USB m=new Mouse();这样就可以视为面向USB接口类型的对象,可以传参。再用m对象使用Computer类中方法,就能输出打印了。

代码

USB接口

public interface USB {
    void connect();
    void exit();
}

KeyBoard类

public class KeyBoard implements USB{//相当于另一种形式的继承父类
    @Override
    public void connect() {
        System.out.println("连接上了键盘....");
    }

    @Override
    public void exit() {
        System.out.println("拔出了键盘....");
    }
    public void input(String a){
        System.out.println("使用了键盘输入了:"+a);
    }
}

Mouse类

public class Mouse implements USB{
    @Override
    public void connect() {
        System.out.println("连接上了鼠标...");
    }
    @Override
    public void exit() {
        System.out.println("拔出了鼠标...");
    }
    public void click(){
        System.out.println("使用了鼠标点击桌面..");
    }
}

Computer类

public class Computer {
    public void use(USB usb){
        usb.connect();
        if (usb instanceof KeyBoard){
            ((KeyBoard) usb).input("HelloWolrd");
        }
        if (usb instanceof Mouse){
            ((Mouse) usb).click();
        }
        usb.exit();
    }
}

Test类

public class Test3 {
    public static void main(String[] args) {
        USB m=new Mouse();
        USB k=new KeyBoard();

        Computer c=new Computer();
        c.use(k);
        c.use(m);
    }
}

加判断的代码

这是我查的一个,它是在Computer里定义了一个私有化变量,判断是否有接入的USB设备,感兴趣的可以看一下它加的判断

// USB 接口
interface USB {
    void plugIn();  // 接入
    void unplug();  // 拔出
}

// 鼠标类,实现 USB 接口
class Mouse implements USB {
    @Override
    public void plugIn() {
        System.out.println("鼠标已接入电脑。");
    }

    @Override
    public void unplug() {
        System.out.println("鼠标已拔出电脑。");
    }

    // 鼠标的独有功能:单击
    public void click() {
        System.out.println("鼠标单击了一下。");
    }
}

// 键盘类,实现 USB 接口
class Keyboard implements USB {
    @Override
    public void plugIn() {
        System.out.println("键盘已接入电脑。");
    }

    @Override
    public void unplug() {
        System.out.println("键盘已拔出电脑。");
    }

    // 键盘的独有功能:输入
    public void input(String text) {
        System.out.println("键盘输入了内容:" + text);
    }
}

// 电脑类
class Computer {
    private USB usbDevice; // 当前接入的 USB 设备

    // 接入 USB 设备
    public void connectUSB(USB usbDevice) {
        this.usbDevice = usbDevice;
        usbDevice.plugIn();
    }

    // 拔出 USB 设备
    public void disconnectUSB() {
        if (usbDevice != null) {
            usbDevice.unplug();
            usbDevice = null;
        } else {
            System.out.println("当前没有接入的 USB 设备。");
        }
    }

    // 使用鼠标的单击功能
    public void useMouseClick(Mouse mouse) {
        if (usbDevice instanceof Mouse) {
            mouse.click();
        } else {
            System.out.println("当前接入的设备不是鼠标。");
        }
    }

    // 使用键盘的输入功能
    public void useKeyboardInput(Keyboard keyboard, String text) {
        if (usbDevice instanceof Keyboard) {
            keyboard.input(text);
        } else {
            System.out.println("当前接入的设备不是键盘。");
        }
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        // 创建电脑对象
        Computer computer = new Computer();

        // 创建鼠标和键盘对象
        Mouse mouse = new Mouse();
        Keyboard keyboard = new Keyboard();

        // 接入鼠标并使用单击功能
        computer.connectUSB(mouse);
        computer.useMouseClick(mouse);

        // 拔出鼠标
        computer.disconnectUSB();

        // 接入键盘并使用输入功能
        computer.connectUSB(keyboard);
        computer.useKeyboardInput(keyboard, "Hello, World!");

        // 拔出键盘
        computer.disconnectUSB();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值