Java的编程之旅32——继承与多态的联合使用

模拟USB设备接入电脑

1.首先建立一个名为“USB”的抽象类

public abstract class USB {public abstract void On();public abstract void Off();
}

这是一个抽象类USB,表示一个USB设备。 该类有两个抽象方法On()和Off(),分别表示打开和关闭USB设备。 由于USB是一个抽象类,不能直接实例化,需要通过继承该类来实现具体的USB设备。子类需要实现On()和Off()方法,来实现具体的打开和关闭USB设备的操作。

2.创建“Keyboard”和“Mouse”类继承“USB”类

public class Keyboard extends USB{@Overridepublic void On() {System.out.println("键盘已连接...");}@Overridepublic void Off() {System.out.println("键盘已断开...");}void Inputting(){System.out.println("键盘正在输入...");}
}

这是一个名为Keyboard的类,它继承了USB抽象类。 Keyboard类重写了父类USB中的On()和Off()方法,并实现了一个名为Inputting()的方法。 在Keyboard类中,当调用On()方法时,会打印出"键盘已连接..."的消息;当调用Off()方法时,会打印出"键盘已断开..."的消息。 此外,Keyboard类还定义了一个Inputting()方法,用于表示键盘正在输入。 因此,Keyboard类代表了一个键盘设备,具有连接、断开和输入的功能。

public class Mouse extends USB{@Overridepublic void On() {System.out.println("鼠标已连接...");}@Overridepublic void Off() {System.out.println("鼠标已断开...");}void LeftClick(){System.out.println("鼠标左键已点击...");}void RightClick(){System.out.println("鼠标右键已点击...");}}

这是一个名为Mouse的类,它继承了USB抽象类。 Mouse类重写了父类USB中的On()和Off()方法,并实现了两个额外的方法:LeftClick()和RightClick()。 在Mouse类中,当调用On()方法时,会打印出"鼠标已连接..."的消息;当调用Off()方法时,会打印出"鼠标已断开..."的消息。 此外,Mouse类还定义了两个点击方法:LeftClick()表示鼠标左键点击,RightClick()表示鼠标右键点击。 因此,Mouse类代表了一个鼠标设备,具有连接、断开和点击的功能。

3.创建“Computer”类

public class Computer {void On(){System.out.println("电脑已开机...");}void Off(){System.out.println("电脑已关机...");}public void useDevice(USB dev){dev.On();if(dev instanceof Keyboard){((Keyboard)dev).Inputting();}else if(dev instanceof Mouse) {((Mouse) dev).LeftClick();((Mouse) dev).RightClick();}dev.Off();}
}

这是一个名为Computer的类,它表示一台电脑。 Computer类有两个方法:On()和Off(),表示电脑的开机和关机操作。 Computer类还有一个useDevice方法,用来使用USB设备。 在useDevice方法中,首先调用了USB设备的On()方法,表示连接设备。 然后使用了类型检查和类型转换的机制,判断传入的USB设备是Keyboard还是Mouse。 如果是Keyboard设备,则调用Keyboard类独有的Inputting()方法,表示键盘正在输入。 如果是Mouse设备,则调用Mouse类独有的LeftClick()和RightClick()方法,表示鼠标左键和右键点击。 最后,调用USB设备的Off()方法,表示断开设备。 通过这样的设计,Computer类实现了对USB设备的使用,并根据不同的设备类型执行不同的操作。

4.主方法

public class Run {public static void main(String[] args) {Computer computer = new Computer();computer.On();computer.useDevice(new Keyboard());computer.useDevice(new Mouse());computer.Off();}
}

这是一个名为Run的类,其中包含了主方法main。 在主方法中,首先创建了一个Computer对象computer。 然后调用了computer的On()方法,表示电脑已经开机。 接着使用了computer的useDevice方法,传入了一个Keyboard对象,表示连接了一个键盘设备。 在useDevice方法中,会先调用键盘的On()方法,然后执行键盘的Inputting()方法,表示键盘正在输入, 最后调用键盘的Off()方法,表示断开键盘设备。 接下来又使用了computer的useDevice方法,传入了一个Mouse对象,表示连接了一个鼠标设备。 在useDevice方法中,会先调用鼠标的On()方法,然后执行鼠标的LeftClick()和RightClick()方法,表示鼠标进行了左键和右键点击操作, 最后调用鼠标的Off()方法,表示断开鼠标设备。 最后,调用了computer的Off()方法,表示电脑已经关机。 通过这样的设计,Run类展示了如何使用Computer类来操作USB设备,并打印出相应的连接和断开信息。

运行结果

 

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

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

相关文章

javaee教程郑阿奇,一线互联网架构师筑基必备技能之Java篇

一、什么情况下会发生栈内存溢出? 1、栈是线程私有的,栈的生命周期和线程一样,每个方法在执行的时候就会创建一个栈帧,它包含局部变量表、操作数栈、动态链接、方法出口等信息,局部变量表又包括基本数据类型和对象的引…

【GameFramework框架内置模块】6、实体(Entity)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…

K 个一组翻转链表 力扣

【玩转校招算法面试】第三天:链表中的节点每k个一组翻转(动画演示、手写 Java 代码、详细注释、LeetCode 高频算法题)_哔哩哔哩_bilibili 初始状态:1 -> 2 -> 3,pre null, cur 1保存当前节点的下一个节点&…

并查集基础,死去的回忆突然攻击我

并查集普及【模板】并查集 - 洛谷 #include<iostream> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; #define int long long typedef pair<int,int> PII; #define xx first #define y…

TypeScript 中类的理解及应用场景

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…

瑞_23种设计模式_组合模式

文章目录 1 组合模式&#xff08;Composite Pattern&#xff09;1.1 介绍1.2 概述1.3 组合模式的结构1.4 组合模式的分类1.5 组合模式的优点1.6 组合模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列…

TP6上传图片到OSS(记录贴)

1&#xff0c;先安装&#xff0c;我使用composer安装 在项目的根目录运行composer require aliyuncs/oss-sdk-php 2,安装成功以后vendor目录下可以看到如图&#xff1a; 3&#xff0c;上传图片代码如下&#xff1a; <?php namespace app\controller;use app\BaseControll…

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…

生成voc格式数据集

数据集存放格式&#xff1a;&#xff08;Annotations文件夹放标注的xml文件&#xff0c;JPEGImages文件夹放标注的图片&#xff09; 运行代码&#xff1a; import os import random import xml.etree.ElementTree as ETimport numpy as npdef get_classes(classes_path):with …

USACO 2024 Feb Bronze铜组题解

闲话:今天是4年一度的奇观——2月29日!(地球人都知道) 所以为了纪念这个特殊的日子&#xff0c;我决定倒着讲。这是什么奇怪的规矩&#xff1f;(雾 Maximizing Productivity: 二分即可。 #include <bits/stdc.h> using namespace std; const int maxn200005; int c[ma…

深入理解Java中的优先级队列(堆)——PriorityQueue

引言&#xff1a; 在Java中&#xff0c;优先级队列&#xff08;PriorityQueue&#xff09;是一种基于堆结构实现的队列&#xff0c;其中每个元素都有一个优先级&#xff0c;优先级高的元素在队列中具有更高的优先级&#xff0c;排在前面。优先级队列常用于任务调度、事件处理等…

LeetCode——栈和队列(Java)

栈和队列 简介[简单] 232. 用栈实现队列[简单] 225. 用队列实现栈[简单] 20. 有效的括号[简单] 1047. 删除字符串中的所有相邻重复项[中等] 150. 逆波兰表达式求值[困难] 239. 滑动窗口最大值[中等] 347. 前 K 个高频元素 简介 记录一下自己刷题的历程以及代码。写题过程中参考…

网工内推 | 项目经理,软考证书优先,最高26K,加班补贴

01 龙盈智达 招聘岗位&#xff1a;项目经理 职责描述&#xff1a; 1 根据业务员需求&#xff0c;完成生态圈下账簿中心系统的开发管理工作。 2 负责账簿中心实施过程中的需求调研分析、方案设计、开发测试、系统上线等工作的计划、组织协调、沟通等方面管理工作。 3 完成系统核…

Spring八股 常见面试题

什么是Spring Bean 简单来说&#xff0c;Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象&#xff0c;这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。 将一个类声明为 Bean 的注解有哪些? Com…

发掘效率黑科技:Allure报告助您事半功倍提升测试效能!

Allure 简介与安装 Allure 是由 Java 语⾔开发的⼀个轻量级&#xff0c;灵活的测试报告⼯具。 Allure 多平台的 Report 框架。 Allure ⽀持多语⾔&#xff0c;包括 python、JaveScript、PHP、Ruby 等。 可以为开发/测试/管理等人员提供详尽的的测试报告&#xff0c;包括测试…

el-table 指定表格合并行与单元格,以及表头合并单元格

1&#xff1a;页面html <template><div class"container"><div class"flex-end"><el-button type"primary" click"allEndBtn">批量办结</el-button><el-button type"primary" click"…

面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数

在C编程中&#xff0c;类是构建程序的基石&#xff0c;而理解类的默认成员函数对于高效使用C至关重要。本文将深入探讨这六个默认成员函数及其他相关概念&#xff0c;提供给读者一个全面的视角。 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为…

【前端素材】推荐优质后台管理系统Dashy平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

MySQL 如何从 Binlog 找出变更记录并回滚

文章目录 前言1. 案例模拟1.1 确认信息1.2 下载 Binlog1.3 准备环境1.4 注册 Binlog1.5 准备结构信息1.6 Python 订阅1.7 输出结果展示 2. 原理解析2.1 程序设计2.2 模块版本 总结 前言 最近有研发同学问我&#xff1a;有一个问题&#xff0c;想查一个 ID 为 xxxx 的 sku 什么…

经典DP-最长单调子序列

最长递增子序列 思路 定义状态&#xff1a; 我们定义一个数组 dp&#xff0c;其中 dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度。初始化状态&#xff1a; 对于数组中的每个元素 nums[i]&#xff0c;初始时都可以被视为一个长度为1的递增子序列&#xff0c;因此 dp[i] 的…