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


相关文章
|
1天前
|
Java 开发者
Java一分钟之-Lambda表达式与函数式接口
【5月更文挑战第12天】Java 8引入的Lambda表达式简化了函数式编程,与函数式接口结合,实现了代码高效编写。本文介绍了Lambda的基本语法,如参数列表、箭头符号和函数体,并展示了如何使用Lambda实现`Runnable`接口。函数式接口仅有一个抽象方法,可与Lambda搭配使用。`@FunctionalInterface`注解用于确保接口具有单一抽象方法。文章还讨论了常见的问题和易错点,如非函数式接口、类型冲突以及Lambda表达式的局部变量可见性,并提供了避免这些问题的策略。通过理解Lambda和函数式接口,开发者能提高代码可读性和效率。
16 4
|
2天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
41 3
|
2天前
|
Java API
Java 接口
5月更文挑战第6天
|
3天前
|
存储 安全 Java
Java一分钟之-Map接口与HashMap详解
【5月更文挑战第10天】Java集合框架中的`Map`接口用于存储唯一键值对,而`HashMap`是其快速实现,基于哈希表支持高效查找、添加和删除。本文介绍了`Map`的核心方法,如`put`、`get`和`remove`,以及`HashMap`的特性:快速访问、无序和非线程安全。讨论了键的唯一性、`equals()`和`hashCode()`的正确实现以及线程安全问题。通过示例展示了基本操作和自定义键的使用,强调理解这些概念对编写健壮代码的重要性。
6 0
|
3天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
9 0
|
3天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
3天前
|
Java
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
|
3天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
4天前
|
Java
Java一分钟之-抽象类与接口的应用场景
【5月更文挑战第9天】Java中,抽象类和接口用于实现多态和抽象。抽象类不能实例化,提供部分实现和定义模板;接口包含无实现的抽象方法,用于定义行为规范和解耦合。选择时,关注行为用接口,部分实现用抽象类。注意抽象类的`final`和`static`方法、接口冲突等问题,明确设计目标,适度抽象,遵循接口设计原则,以提高代码质量。
12 1
|
4天前
|
Java
Java一分钟之-多态性:理解重写与接口
【5月更文挑战第9天】本文介绍了Java中的多态性,主要通过方法重写和接口实现。重写允许子类根据实际类型执行不同实现,关键点包括方法签名相同、访问权限不降低以及final、static和abstract方法不可重写。接口是抽象类型,包含抽象方法,提供另一种多态性实现。常见问题包括混淆重载与重写、不理解动态绑定以及滥用接口。为避免问题,需明确重写目的、合理设计接口,并在使用多态时注意类型检查。多态性是提升代码质量和灵活性的关键。
10 1