【Java】接口多态练习题

设计一个USB接口,USB接口拥有启动和停止方法,网卡类实现USB接口,重写实现网卡启动停止方法
声卡类实现USB接口,重写实现声卡启动和停止方法,
主板类拥有使用USB接口的方法。方法接收USB接口类型或子类型,方法中可以启动对应实现类的方法。
根据上要求编写代码,保证下列main方法打印如下结果:

public class Demo {
    public static void main(String [] args){
        //创建主板对象
        MainBoard mb=new MainBoard();   
        //创建网卡对象
        NetworkCard nc=new NetworkCard();
        //启动网卡
        mb.startPCICard(nc);
        //停止网卡
        mb.stopPCICard(nc); 
        //创建声卡对象
        SoundCard sc=new SoundCard();  
        //启动声卡    
        mb.startPCICard(sc); 
        //停止声卡    
        mb.stopPCICard(sc);   
    }
}

网卡启动 ...
网卡停止...
声卡启动...
声卡停止...

参考答案:
——————————————————————————————————————————————————————————————————————
public class Demo {
    public static void main(String [] args){
        MainBoard mb=new MainBoard();       //创建主板对象
        NetworkCard nc=new NetworkCard();   //创建网卡对象
        mb.startPCICard(nc); //启动网卡
        mb.stopPCICard(nc);      //停止网卡
        SoundCard sc=new SoundCard();       //创建声卡对象
        mb.startPCICard(sc);  //启动声卡
        mb.stopPCICard(sc);   //停止声卡
    }
}

interface USB    //PCI接口
{
    void start();
    void stop();
}
class NetworkCard implements USB {   //网卡继承PIC接口
    public void start(){
        System.out.println("网卡启动 ...");
    }
    public void stop(){
        System.out.println("网卡停止...");
    }
}


class SoundCard implements USB     //声卡继承PIC接口
{
    public void start(){
        System.out.println("声卡启动...");
    }
    public void stop(){
        System.out.println("声卡停止...");
    }
}
class MainBoard{                  //主板
    public void startPCICard(USB p){
        p.start();
    }
    public void stopPCICard(USB p){
        p.stop();
    }
}
——————————————————————————————————————————————————————————————————
汽车租赁
某汽车租赁公司出租多种车辆,车辆信息包括:车牌号、品牌、颜色、租金。
出租价格如下:
 * 别克商务: 600元/天
 * 宝马550i: 500元/天
 * 别克林荫大道: 300元/天
 * 客车16座以下: 800元/天
 * 客车>=16座: 1500元/天

定义租赁抽象类Reckon用于计算租金:
    * 接口中有如下属性:车牌号、品牌、颜色、租金、出租时间(当前毫秒值)
    * 接口中定义计算租金的方法money,方法接收Reckon以及子类类型。可以计算租金并返回。
    
定义轿车Car类,继承Reckon。
    * 拥有属性:使用天数 Integer days,提供get/set方法
    * 提供构造方法,可以初始化Car对象的车牌号、品牌、颜色、租金、出租时间
    * 重写接口money方法,根据小汽车的品牌和租用天数计算租金并返回租金。

定义客车Bus类,继承Reckon。
    * 拥有属性:1.使用天数 Integer days,提供get/set方法
                2.成员人数 Integer num,提供get/set方法
    * 提供构造方法,可以初始化Bus对象的车牌号、品牌、颜色、租金、出租时间
    * 重写接口money方法,根据客车的载客量范围和租用天数计算租金并返回租金。

定义一个客户Person类:
    *拥有属性:金额 Integer money 
    *学生自己设计属性,表示出客户可以租用多种车型。
    *提供属性的get/set方法

创建测试类:
    1. main方法中创建一个客户Person,初始化拥有的金额,假设为10000,
    2. main方法中该客户可以多次租车:
        * 控制台打印要租车的类型,接收要租车的天数
        * 根据选择创建对应的车型对象,并讲该对象与客户绑定关系(客户对象可以通过get方法获取到该车)。
        * 每租一辆车要打印当前剩余的金额
        * 当客户的金额不足时退出租车服务。
        * 或者当客户输入的是0时,退出服务
        * 将客户所组的车保存到项目下的dir目录下的history.txt文件中

    注意事项:同一车型,数据只要一条,例如租了2次宝马550i,则保存的是
    京A88888,,宝马550i,红色,21412341232,2辆
    
拓展:
    思考如何创建一个租赁公司类有20辆车,车可以借出给不同客户,客户可以归还汽车。
    将租出的车数据保存到文件中,
    读取文件中的租车数据,计算租赁公司的的收入。
    
欢迎来到租赁中心!
钱数是:10000
请输入租赁的类型:1.轿车 2.客车
2
请输入租赁天数
10
请输入要乘坐人数:16人以下800/天,16人(含)以上1500/天
10
钱数是:2000
----------------------------
请输入租赁的类型:1.轿车 2.客车
1
请输入租赁天数
3
请输入要租赁的车型
     1.别克商务 600元/天
    2.宝马550i 500元/天
    3.别克林荫大道 300元/天
1
钱数是:200
----------------------------
请输入租赁的类型:1.轿车 2.客车
1
请输入租赁天数
1
请输入要租赁的车型
     1.别克商务 600元/天
    2.宝马550i 500元/天
    3.别克林荫大道 300元/天
1
租金不足,还剩下200
----------------------------
请输入租赁的类型:1.轿车 2.客车
0
服务结束

_________________________________________________________

创建人类Person,人类拥有属性:姓名name,年龄age,生日birthday,属性都私有。
    * 提供属性的get/set方法
    * 提供无参和满参构造方法
    
创建子类教师类Teacher,继承Person类。
创建子类厨师类Chef,继承Person类。

创建测试类,读取source.txt中的文件,
    1.数据读取(思考如何把数据放入ArrayList集合 或者 HashMap结合如何操作)
        * 在mian方法中将每条数据封装进对应类对象中,例如第一条是厨师,则将数据封装进厨师Chef类。
        * 将所有对象保存进一个集合中。
    2.数据判断(思考如果把数据放入ArrayList集合 或者 HashMap结合如何操作)
        * 创建方法total,接收main方法中的对象集合,方法中统计每种对象的数量,打印统计结果如下:
            厨师:2人
            教师:3人
    
source.txt
曹操,35,1990年10月,厨师
司马懿,32,1989年12月,教师
孙权,40,1982年05月,厨师
诸葛亮,28,1996年2月,教师
周瑜,29,1991年11月,教师

——————————————————————————————————————————————————————————


 

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

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

相关文章

JVM实战—4.JVM垃圾回收器的原理和调优

大纲 1.JVM的新生代垃圾回收器ParNew如何工作 2.JVM老年代垃圾回收器CMS是如何工作的 3.线上部署系统时如何设置垃圾回收相关参数 4.新生代垃圾回收参数如何优化 5.老年代的垃圾回收参数如何优化 6.问题汇总 1.JVM的新生代垃圾回收器ParNew如何工作 (1)JVM的核心运行原理…

E-commerce .net+React(一)——项目初始化

文章目录 项目地址一、创建.Net环境1.1环境配置1.1.1 使用vscode创建webapi1.1.2 Clean architecture结构创建1.1.3 将创建好结构的项目添加到git里1.1.4 EF Core配置1. 在infrastructure里安装EF所需环境2. 创建Product数据模型3. 创建EF Core的DbContext 数据库上下文4. 创建…

lua和C API库一些记录

相关头文件解释 lua.h:声明lua提供的基础函数,所有内容都有个前缀lua_; luaxlib.h:声明辅助库提供的函数,所有内容都有个前缀luaL_; lualib.h:声明了打开标准库的函数; 辅助库对…

elasticsearch-java客户端jar包中各模块的应用梳理

最近使用elasticsearch-java客户端实现对elasticsearch服务的Api请求,现对elasticsearch-java客户端jar包中各模块的应用做个梳理。主要是对co.elastic.clients.elasticsearch路径下的各子包的简单说明。使用的版本为:co.elastic.clients:elasticsearch-…

机器学习 LightGBM 算法原理解析

摘要: 本文深入探讨机器学习中的 LightGBM 算法,从其基本概念出发,详细阐述了核心原理,包括直方图算法、单边梯度采样、互斥特征捆绑等关键技术,对比分析了与传统 GBDT 算法的差异,还介绍了参数调优策略及在…

vscode实用插件(持续更新)

目录 Git History Diff Git Graph Error Lens Git History Diff 用于将当前分支的某个文件夹与远程分支的相同文件夹做对比,方便代码评审!解决了为了一个问题而多次commit,导致代码不好评审,即不晓得和远程分支相比&#xff0…

full-stack-fastapi-template postgres 管理系统安装指南

full-stack-fastapi-template postgres 管理系统安装指南 本项目基于 full-stack-fastapi-template 模板开发 1. 环境准备 请确保您的系统已安装以下软件: Python 3.9 Node.js 16 PostgreSQL 13 Git Docker (可选,用于容器化部署) 2. 获取代码 # 2.…

关于window.open 被浏览器拦截解决方案

分析原因 当浏览器检测到非用户操作产生的新弹出窗口时,会对其进行阻止,因为浏览器认为这可能是广告,不是用户期望的页面。 注意: 如果 window.open 是在用户触发事件(如点击事件)或页面加载时调用&#…

并发编程-AQS

AQS 什么是AQS java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQueuedSynchronizer(简称AQS)实现的,AQS是一个同步框架,可以用来实现…

Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写

前言 本系列文章从最初的基础原理与入门实践切入,一直延伸到主流策略、引导策略、RAG(检索增强生成)、思维树(ToT)与避免幻觉(Hallucination)的策略这种渐进的结构方便了对初学者和进阶者的双向…

mac系统vsCode中使用Better Comments在.vue文件里失效

问题:关于Better Comments默认在html、TS、JS中有效,在vue中无效,需要单独进行配置 windows系统可以参考友链Better Comments(注释高亮)在vue文件里失效的问题 关于Better Comments电脑的配置路径: Windows系统&…

探索 JavaBean(实体类)的奇妙世界

目录 一、啥是 JavaBean(实体类) (一)定义与特点 (二)为啥要用 JavaBean 二、动手写一个 JavaBean(实体类) (一)创建一个简单的用户 JavaBean &#xf…

mac中idea中英文版本切换

1.快捷键command,或者 2.找到插件(plugins),搜索chinese,安装 第一次安装好点击应用会提示重启,直接重启就好了,如果已经安装过,只需要切换中英文 3.中英文切换 外观与行为&#xf…

单片机库函数-io输出操作

1、需要使用模块 使用库函数做跑马灯,要用到: misc.h misc.c 时钟模块: stm32f10x_rcc.h stm32f10x_rcc.c gpio模块: 头文件:stm32f10x_gpio.h 源文件:stm32f10x_gpio.c 2、库函数 2.1、初始化GPIO void GPIO_Init(GPIO_TypeDef* …

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。 贝叶斯神经网络(Bayesian Neural Network) 贝叶斯神经网络(Bayesian Neural Network)1. BNN 的核心思想2. BNN 的优化目标3. BNN 的结构与特点4. BNN 的训练过程5. BNN 的优缺点6. …

预计5.2.1版本的SharedingSphere Hint指定数据库未生效问题

配置文件展示 shardingsphere:props:sql-show: falsedatasource:names:datacenter1,datacenter2,datacenter3rules:sharding:tables:shape:actual-data-nodes: datacenter$->{1..3}.shape$->{0..7}key-generate-strategy:column: idkey-generator-name: snowflaketable-s…

【Spring】基于注解的Spring容器配置——@Scope注解

在使用Spring框架时,理解Bean的作用域(Scope)是非常重要的。Bean的作用域决定了Spring容器如何创建和管理Bean的生命周期。正确地使用作用域可以提高应用的性能和资源利用率,同时也能确保应用的正确性。 在大型企业级应用中&…

关于Promise的小测验

关于Promise的小测验 题目 // 编码挑战 #1 /* 在这个挑战中,你将构建一个函数 ‘whereAmI’,该函数仅基于 GPS 坐标显示国家信息。为此,你将使用第二个 API 来对坐标进行地理编码。 以下是你的任务: 第一部分 创建一个函数 ‘whe…

“邂逅”良渚遗址 “巧造”苏绣非遗 《牧神记》焕新有“玄机”

由bilibili与玄机科技联合出品的动画番剧《牧神记》自10月27日上线以来,累计收获了1.2亿播放量、超150万用户追番,B站评分9.7分,多次入选豆瓣口碑华语剧集周榜的动画冠军。放眼今年的国产新番,成绩相当可观。巧妙融合诸多传统元素…

AI文献阅读ChatDOC 、ChatPDF 哪个好?

作为AI产品的深度使用者,基本每天都在使用AI。AI诞生后仿佛给所有的产品打开了新世界大门。当然AI在文献阅读方面自然也不会缺席。 先来简单对比一下ChatDOC vs ChatPDF 从表格里可以看到ChatDOC与ChatPDF都是基于GPT的产品,但在功能上ChatDOC还是比Chat…