每日一练编程题:今天是【接口,多态】

news2024/11/20 6:31:03

设计程序 :

  • 电脑类的属性USB接口数组 : 有3个usb插口
  • 电脑类的功能 :
  1. 通过接口插入外设 (u盘,麦克风,键盘等)
    addUSB(USB usb) {
    }
  2. 开机
    要求: 电脑开机前,先启动外设
  3. 关机
    要求: 电脑关机前,先关闭外设
  • 外设类(u盘,麦克风,键盘等)
    功能 : 启动 关闭
    USB接口
    定义usb设备的统一功能
    开启() 关闭()
  • 效果 :
    创建电脑对象,能插入外设,调用方法电脑开机,电脑开机前 外设启动,
    电脑关机前,外设先关闭

UML类图

在这里插入图片描述

参考代码

Usb接口
package day529.homework;
/**
* Description: Usb接口
* date: 2024/5/29 20:51
* @author: LiCoffee
* @since JDK 1.8
*/

public interface Usb {
    void open(); //打开外接设备
    void close(); //关闭外接设备
}
UDisk 类实现 Usb 接口
package day529.homework;

public class UDisk implements Usb{
    @Override
    public void open() {
        System.out.println("打开U盘");
    }

    @Override
    public void close() {
        System.out.println("关闭U盘");
    }
}
Keyboard 类实现 Usb 接口
package day529.homework;

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

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

Keyboard 类实现 Usb 接口
package day529.homework;

public class Microphone implements Usb{
    @Override
    public void open() {
        System.out.println("打开麦克风");
    }

    @Override
    public void close() {
        System.out.println("关闭麦克风");
    }
}

Computer 类
package day529.homework;
/**
* Description: 电脑类
* date: 2024/5/29 20:44
* @author: LiCoffee
* @since JDK 1.8
*/

public class Computer {
    private int interfaceNum; //电脑接口数量
    private Usb[] usbs;      //接口数组
    /**
     * @descriptions 无参构造方法,默认为三个接口
     * @author LiCoffee
     * @date 2024/5/29 20:43
     **/

    public Computer() {
        this(3);
        usbs = new Usb[interfaceNum];//定义接口数量

    }
    /**
     * @descriptions 有参构造方法,个性化定制接口数量
     * @author LiCoffee
     * @date 2024/5/29 20:47
     * @param interfaceNum - 传入接口数量
     **/

    public Computer(int interfaceNum) {
        this.interfaceNum = interfaceNum;
        usbs = new Usb[interfaceNum];
    }

    public int getInterfaceNum() {
        return interfaceNum;
    }

    public void setInterfaceNum(int interfaceNum) {
        this.interfaceNum = interfaceNum;
    }
    /**
     * @descriptions 插入设备
     * @author LiCoffee
     * @date 2024/5/29 20:48
     * @param usb -插入设备类型
     **/
    public void addUsb(Usb usb){
        for (int i = 0; i < usbs.length; i++) {
            if (usbs[i] == null) {
                usbs[i] = usb;
                break;
            }
        }
    }
    /**
     * @descriptions 打开电脑
     * @author LiCoffee
     * @date 2024/5/29 20:50
     **/

    public void open(){
        System.out.println("电脑打开");
        for (int i = 0; i < usbs.length; i++) {
            if (usbs[i] == null) {  //防止空指针异常
                break;
            }
            usbs[i].open();
        }

    }
    /**
     * @descriptions 关闭电脑
     * @author LiCoffee
     * @date 2024/5/29 20:50
     **/

    public void close(){
        for (int i = 0; i < usbs.length; i++) {
            if (usbs[i] == null) {  //防止空指针异常
                break;
            }
            usbs[i].close();
        }
        System.out.println("电脑关闭");
    }
}

Test 测试类
package day529.homework;

public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer(); //创建电脑
        computer.addUsb(new Keyboard());    //插入接口
        computer.addUsb(new Microphone()); //插入接口
        computer.addUsb(new UDisk());     //插入接口
        computer.open();    //打开电脑
        computer.close();   //关闭电脑

    }

}

最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1720414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高速服务区智慧公厕管理系统引导屏UI界面展示

在现代社会&#xff0c;高速服务区作为人们出行途中的重要休憩场所&#xff0c;其各项设施的智能化水平也在不断提升。其中&#xff0c;智慧公厕管理系统的出现&#xff0c;为人们带来了更加便捷、舒适的如厕体验&#xff0c;而引导屏 UI 界面更是这一系统的重要展示窗口。 智慧…

电脑设置密码怎么设置?让你的电脑更安全!

在如今信息化的社会中&#xff0c;保护个人电脑的安全至关重要。设置密码是最基本的电脑安全措施之一&#xff0c;它可以有效防止未经授权的访问和保护个人隐私&#xff0c;可是电脑设置密码怎么设置&#xff1f;本文将介绍三种设置电脑密码的方法&#xff0c;帮助您加强电脑的…

vue3学习使用笔记

1.学习参考资料 vue3菜鸟教程&#xff1a;https://www.runoob.com/vue3/vue3-tutorial.html 官方网站&#xff1a;https://cn.vuejs.org/ 中文文档: https://cn.vuejs.org/guide/introduction.html Webpack 入门教程&#xff1a;https://www.runoob.com/w3cnote/webpack-tutor…

wampserver安装与汉化

wampserver安装与汉化 文章目录 wampserver安装与汉化一、安装二、汉化1.升级软件并安装补丁 介绍&#xff1a; WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以及MySQL数据库的整合软件包。免去了开发人员将时间花费在繁琐的配置环境过程&#xff0c;从而腾出更…

谁拥有最多的H100?

谁拥有最多的H100&#xff1f; Omdia数据显示&#xff0c;Meta和微软作为H100的最大买家&#xff0c;各自采购了15万台GPU&#xff0c;两者总计占据30万台的销量。剩余的20万台则由Oracle、腾讯、Google和亚马逊平分&#xff0c;每家各购买了5万台。值得关注的是&#xff0c;报…

HackTheBox-Machines--Shocker

Popcorn 测试过程 1 信息收集 NMAP 开启了两个端口&#xff0c;端口 80&#xff08;http&#xff09;、 2222&#xff08;ssh&#xff09;。 80 端口 访问80端口&#xff0c;页面只有一张图片&#xff0c;无可利用点&#xff0c;尝试进行目录扫描。 目录扫描 目录扫描发现 /c…

网络原理-四

一、续 当窗口大小为0,意味着缓冲区满了,此时发送方,就因该暂停发送,发送方会周期性的除法 " 窗口探测包 " ,并不携带载荷,这样的包对于业务不产生影响,只是为了触发ACK,一旦查询出来的结果是非0,缓冲区右有空间了,发送方就可以继续发送. 二、拥塞控制 要限制发送方…

GPT-4o:新一代人工智能技术的全方位解析引言

目录 &#x1f40b;引言 &#x1f40b;梳理 GPT 各版本之间的内容 &#x1f988;GPT-1&#xff1a;开创性的起点 &#x1f988; GPT-2&#xff1a;参数规模的大幅提升 &#x1f988; GPT-3&#xff1a;参数爆炸与多任务学习 &#x1f988;GPT-4&#xff1a;进一步提升的智…

Qt 5桌面APP开发实战

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 第一节&#xff1a;Qt 5桌面APP开发实战入门 Qt 5的跨平台特性 Qt 5的界面设计工具 Qt 5的…

Leecode---栈---每日温度 / 最小栈及栈和队列的相互实现

栈&#xff1a;先入后出&#xff1b;队列&#xff1a;先入先出 一、每日温度 Leecode—739题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温…

Android下HWC以及drm_hwcomposer普法(下)

Android下HWC以及drm_hwcomposer普法(下) 引言 不容易啊&#xff0c;写到这里。经过前面的普法(上)&#xff0c;我相信童鞋们对HWC和drm_hwcomposer已经有了一定的认知了。谷歌出品&#xff0c;必须精品。我们前面的篇章见分析到啥来了&#xff0c;对了分析到了HwcDisplay::in…

git报错prohibited by Gerrit: not permitted: update

git push报错&#xff1a; Push to refs/for/[branch] to create a review, or get Push rights to update the branch. Contact an administrator to fix the permissions (prohibited by Gerrit: not permitted: update)原因&#xff1a; 使用Gerrit代码审核时&#xff0c;本…

c++车票管理系统

这里写自定义目录标题 c车票管理系统vx:sredxc车票管理系统初始页面,需要源码vx:sredxc新增车票信息查询车票信息代码包含完整的发布车票信息,购票,退票,票数检测,余票检测,车票查询等功能 c车票管理系统vx:sredxc 这段代码实现了一个简单的高铁票务管理系统&#xff0c;具有以…

算法每日一题(python,2024.05.24) day.6

题目来源&#xff08;力扣. - 力扣&#xff08;LeetCode&#xff09;&#xff0c;简单&#xff09; 解题思路&#xff1a; 排序&#xff0b;双指针 先将两个数组进行排序&#xff0c;cursor1和cursor分别指向两个数组的首位&#xff0c;比较两个指针所指的值的大小&#xff0…

斑消宝六周年大动作,斑小将将再迎高光时刻

如今&#xff0c;周年庆典已经成为众多品牌展示自身实力与影响力的重要舞台。这不仅仅是一个简单的庆祝活动&#xff0c;更是一次向外界展示品牌发展历程、未来规划以及团结合作伙伴的绝佳机会。在这样的背景下&#xff0c;广州斑消宝化妆品有限公司将打造别具一格的盛典&#…

TiDB-从0到1-分布式存储

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCC 一、TiDB-DML语句执行流程&#xff08;增删改&#xff09; DML流程概要 1、协议验证 用户连接到TiDB Server后首先工作的是Protocol Layer模块&#xff0c;该模块会对用…

【Node】Assertion testing 模块的使用

简言 node:assert 模块提供了一组用于验证不变式的断言函数。 node版本&#xff1a;20.14.0 Assertion testing 测试断言模块 node:assert 模块是一个测试相关的模块。 严格模式和非严格模式 感觉该模块的严格模式和js的严格模式相匹配&#xff0c;非严格模式也是这样的。…

Visual Studio的桌面快捷方式图标不显示

1.问题描述 以下以Visual Studio 2019举例&#xff0c; 正常图标&#xff1a; 但是当前Visual Studio的桌面快捷方式图标不显示了&#xff1f; 2.问题原因分析 Visual Studio 2019桌面快捷方式图标不显示可能由以下几个原因造成&#xff1a; 图标缓存问题&#xff1a;Windo…

实用软件分享---超级轻量级的强力卸载软件工具UninstallView_1.51

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

大话设计模式学习笔记

目录 工厂模式策略模式备忘录模式&#xff08;快照模式&#xff09;代理模式单例模式迭代器模式访问者模式观察者模式解释器模式命令模式模板方法模式桥接模式适配器模式外观模式享元模式原型模式责任链模式中介者模式装饰模式状态模式 工厂模式 策略模式 核心&#xff1a;封装…