【Java】接口多态练习题

简介: 【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月,教师


相关文章
|
3月前
|
安全 Java API
Java 抽象类与接口在 Java17 + 开发中的现代应用实践解析
《Java抽象类与接口核心技术解析》 摘要:本文全面剖析Java抽象类与接口的核心概念与技术差异。抽象类通过模板设计实现代码复用,支持具体方法与状态管理;接口则定义行为规范,实现多态支持。文章详细对比了两者在实例化、方法实现、继承机制等方面的区别,并提供了模板方法模式(抽象类)和策略模式(接口)的典型应用示例。特别指出Java8+新特性为接口带来的灵活性提升,包括默认方法和静态方法。最后给出最佳实践建议:优先使用接口定义行为规范,通过抽象类实现代码复用,合理组合两者构建灵活架构。
66 2
|
3月前
|
JSON Java 数据库连接
|
6月前
|
机器学习/深度学习 人工智能 NoSQL
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。
1028 3
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
|
5月前
|
Java 编译器 API
Java Lambda 表达式:以 Foo 接口为例深入解析
本文深入解析了 Java 8 中 Lambda 表达式的用法及其背后的函数式接口原理,以 `Foo` 接口为例,展示了如何通过简洁的 Lambda 表达式替代传统匿名类实现。文章从 Lambda 基本语法、函数式接口定义到实际应用层层递进,并探讨默认方法与静态方法的扩展性,最后总结常见误区与关键点,助你高效优化代码!
110 0
|
5月前
|
Java
java中一个接口A,以及一个实现它的类B,一个A类型的引用对象作为一个方法的参数,这个参数的类型可以是B的类型吗?
本文探讨了面向对象编程中接口与实现类的关系,以及里氏替换原则(LSP)的应用。通过示例代码展示了如何利用多态性将实现类的对象传递给接口类型的参数,满足LSP的要求。LSP确保子类能无缝替换父类或接口,不改变程序行为。接口定义了行为规范,实现类遵循此规范,从而保证了多态性和代码的可维护性。总结来说,接口与实现类的关系天然符合LSP,体现了多态性的核心思想。
109 0
|
5月前
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
185 0
|
7月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
1189 5
|
8月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
450 15
|
9月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
141 6

热门文章

最新文章