Java面向接口编程—习题

news2024/9/20 0:15:47

Java面向接口编程—习题

Java面向接口编程—习题

  • Java面向接口编程—习题
    • 需求
    • 实现思路
    • 具体步骤
      • 1.步骤一:创建接口
      • 2.步骤2:创建接口的实现类
      • 3.步骤3:创建一个厂商
      • 4.步骤四:创建测试类

需求

  • 说明采用面向接口编程思想
  • 组装一台计算机
  • 计算机的主要组成部分:CPU 硬盘 内存

实现思路

  • 定义CPU的接口CPU,返回CPU品牌和主频
  • 定义内存的接口EMS,返回类型和容量
  • 定义硬盘的接口HardDisk,返回容量
  • 编写各组件厂商分别实现CPU、EMS、和HardDisk接口
  • 编写计算机类,组装计算机并显示相关信息编写测试类运行

注意点:

  • 当调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
  • 接口里面方法定义为抽象方法,为了让实现接口的实现类按照这种方法约束进行重写。

具体步骤

1.步骤一:创建接口

接口里面方法定义为抽象方法,为了让实现接口的实现类按照这种方法约束进行重写。

定义CPU的接口CPU,返回CPU品牌和主频

public interface Cpu {
    public abstract String cpuInfo();
}

定义内存的接口EMS,返回类型和容量

public interface EMS {
    public String emsInfo();
}

定义硬盘的接口HardDisk,返回容量

public interface HardDisk {
    public String hardDiskInfo();
}

2.步骤2:创建接口的实现类

这里 默认采取标准的javab类来创建

CPU的接口的实现类

public class CpuImplement implements Cpu{
    private String brand;
    public String zhuPin;

    public CpuImplement() {
    }
    public CpuImplement(String brand, String zhuPin) {
        this.brand = brand;
        this.zhuPin = zhuPin;
    }

    public String getBrand() { return brand;}
    public void setBrand(String brand) {this.brand = brand;}
  
    public String getZhuPin() { return zhuPin;}
    public void setZhuPin(String zhuPin) {
        this.zhuPin = zhuPin;}

    @Override
    public String cpuInfo() {
        return "CPU的品牌:"+this.getBrand()+",主频是:"+this.getZhuPin();
    }
    public void print(){
        System.out.println("这是cpu。。。");
    }
}

内存的接口EMS实现类

public class EmsImplement implements EMS{
    private String emsType;

    public EmsImplement() {
    }

    public EmsImplement(String emsType) {
        this.emsType = emsType;
    }

    public String getEmsType() {
        return emsType;
    }

    public void setEmsType(String emsType) {
        this.emsType = emsType;
    }

    @Override
    public String emsInfo() {
        return "内存容量为:"+this.emsType;
    }
}

硬盘的接口HardDisk的实现类

public class HardDiskImp implements HardDisk{
    private String zoom;

    public HardDiskImp() {
    }

    public HardDiskImp(String zoom) {
        this.zoom = zoom;
    }

    public String getZoom() {
        return zoom;
    }

    public void setZoom(String zoom) {
        this.zoom = zoom;
    }

    @Override
    public String hardDiskInfo() {
        return "硬盘容量为:"+this.zoom;
    }
}

3.步骤3:创建一个厂商

这里的厂商可以为操作实现类业务的类

注意:厂商类有个打印信息的方法,方法形参是接口类型,当调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象

public class Makers {
    private Cpu cpu;
    private EMS ems;
    private HardDisk hardDisk;

    public Makers() {
    }

    public Makers(Cpu cpu, EMS ems, HardDisk hardDisk) {
        this.cpu = cpu;
        this.ems = ems;
        this.hardDisk = hardDisk;
    }

    public Cpu getCpu() {
        return cpu;
    }

    public void setCpu(Cpu cpu) {
        this.cpu = cpu;
    }

    public EMS getEms() {
        return ems;
    }

    public void setEms(EMS ems) {
        this.ems = ems;
    }

    public HardDisk getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(HardDisk hardDisk) {
        this.hardDisk = hardDisk;
    }
    //调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
 public void printInfo(Cpu cpu, EMS ems, HardDisk hardDisk){
        System.out.println("计算机的信息如下:");
        System.out.println(cpu.cpuInfo());
        System.out.println(ems.emsInfo());
        System.out.println(hardDisk.hardDiskInfo());
    }
}

4.步骤四:创建测试类

注意点:

在创建实现类对象的时候用接口来接收实现类的对象 (即 多态形式),此时会有局限性,调用不到实现类里独有的方法,如下面注释里的代码,用接口Cpu来接收CpuImplement实现类的对象,此时接口Cpu会调用不到CpuImplement实现类里独有的print方法。

 Cpu c  = new CpuImplement("Inter","3.8HGZ");
//c.print();此处报错
public class Test {
    public static void main(String[] args) {
        /**
         * 实现思路
         * 定义CPU的接口CPU,返回CPU品牌和主频
         * 定义内存的接口EMS,返回类型和容量
         * 定义硬盘的接口HardDisk,返回容量
         * 编写各组件厂商分别实现CPU、EMS、和HardDisk接口
         * 编写计算机类,组装计算机并显示相关信息
         * 编写测试类运行
         */

        // 接口来接收实现类的对象 ——>多态
        // 会有局限性,调用不到实现类里独有的方法
        // Cpu c  = new CpuImplement("Inter","3.8HGZ");
        // c.print();此行报错


        // 实现类 来接受实现类的对象
      CpuImplement cpu = new CpuImplement("Inter","3.8HGZ");
        EmsImplement ems = new EmsImplement("4GB");
        HardDiskImp hardDisk = new HardDiskImp("3000GB");

        // 厂商类
        Makers m = new Makers();
        m.printInfo(cpu,ems,hardDisk);
    }
}

在这里插入图片描述

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

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

相关文章

【RabbitMQ工作原理相关】

RabbitMQ如何保证消息不丢失 开启生产者确认机制,确保生产者的消息能到达队列开启持久化功能,确保消息未消费前在队列中不会丢失开启消费者确认机制为auto,由spring确认消息处理成功后完成ack开启消费者失败重试机制,多次重试失败后将消息投递到异常交换机,交由人工处理 Rabb…

Linux Debian12安装Peek录屏软件,录制gif动态图

一、Peek安装 在Debian 12 (codenamed “Bookworm”) 上安装 Peek 录屏软件,可以通过以下步骤进行: 1.打开终端。 2.更新系统的包索引: sudo apt update3.安装 Peek 的依赖项: sudo apt install peek如果你遇到问题&#xff…

【大模型LLMs】文本分块Chunking调研LangChain实战

【大模型LLMs】文本分块Chunking调研&LangChain实战 Chunking策略类型1. 基于规则的文本分块2. 基于语义Embedding分块3. 基于端到端模型的分块4. 基于大模型的分块 Chunking工具使用(LangChain)1. 固定大小分块(字符&token&#xff…

IC-Light还原细节的节点 DetailTransfer使用时报错-comfyui

🎈问题描述 今天在调试一个工作流节点的时候,遇到一个问题: Error occurred when executing DetailTransfer: The size of tensor a (848) must match the size of tensor b (853) at non-singleton dimension 2 File "F:\ComfyUI-aki\…

Volvo EDI 项目测试流程详解

近期知行帮助多个供应商成功对接Volvo EDI,这些案例中,供应商收到Volvo发来的EDI需求是基本一致的: 传输协议选择OFTP报文标准选择EDIFACT业务单据包括:DELFOR交付预测以及DESADV发货通知 扩展阅读:汽车EDI&#xff…

车规级CAN总线外围电路设计方案

目录 1、共模电感 1.1、电感值 1.2、泄漏电感 1.3、直流电阻 1.4、CMC的模式转换特性 2、终端分立电阻 3、总线电容 4、ESD保护二极管 在汽车领域,电磁兼容性(EMC)问题一直备受瞩目。相较于传统汽车,新能源汽车的EMC挑战更…

如何使用ssm实现社区智慧养老监护管理平台+vue

TOC ssm270社区智慧养老监护管理平台vue 系统概述 1.1 研究背景 智慧养老是面向居家老人、社区及养老机构的传感网系统与信息平台,并在此基础上提供实时、快捷、高效、低成本的,物联化、互联化、智能化的养老服务。 随着科技进步,新型养…

无法启动此程序,因为计算机中丢失dll,整理了7种解决方法!

当电脑出现“无法启动此程序,因为计算机中丢失dll”的错误弹窗时,这通常意味着系统中的DLL文件出现了缺失或错误。DLL文件是动态链接库文件,它们在软件运行中起着至关重要的作用。 造成dll文件缺失和错误的原因有很多,大部分问题都…

git clone 别人的项目上传到自己的Gitee或者github仓库

git clone别人的项目 git clone https://github.com/wohuweixiya/yft-design.git 进入该项目内,删除原有的.git信息 rm -r .git 初始化.git git init 将本地代码添加到仓库 git add . git commit -m "提交仓库说明" Github上新建一个和这个clone下来…

【快速选择算法】解决TopK问题中前K小的数字问题

目录 1.前言2.题目简介3.求解思路4.示例代码 1.前言 在一个数组中找到这个数组前K小的数字有三种方式: 排序 O(N*logN)堆排序:建立一个k个大小的大堆(如果是找前K大的数字的话用小堆) O(N*logK)快速选择算法:原地交换数字,使得该…

数据结构---单链表(常见的复杂操作)

目录 一、单链表 1.1.查找中间元素 1.2.查找倒数第K个节点 1.3.链表倒置 1.4.冒泡排序 1.5.选择排序 1.6.环,确认有环单链表的环入口和环大小 二、总结 一、单链表 1.1.查找中间元素 定义两个指针,分别指向第一个元素,第一个指针每次向后…

开源的工作流系统突出优点总结

当前,想要实现高效率的办公,可以一起来了解低代码技术平台、开源的工作流系统的相关特点和功能优势。作为较受职场喜爱的平台产品,低代码技术平台拥有可视化才做界面、灵活、好维护操作等多个优势特点,在推动企业流程化办公的过程…

在线生成书法字帖,想练习什么字就练习什么字

有没有想练习一个字的时候发现找不到字帖的情况,现在推荐一款在线生成字帖的网站 可选择对应格子类型,生成你想练习的字 在线生成字帖

【简历】25届北京某211JAVA简历:外卖项目要点像玩一样

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份北京某211大学的java简历。上来第一要点还是要先确定求职层次,那211同学就不要想了,就一个目标&#xf…

mysql 死锁 锁表的解决方法

查看那个表锁了 SHOW OPEN TABLES where In_use > 0; show processlist SELECT * FROM information_schema.INNODB_TRX; 查看锁的进程 kill 掉进程id (trx_mysql_thread_id)

CAD中命令和系统变量

屏幕去除菜单全屏显示: ThisDrawing.SendCommand ("CLEANSCREENON ") 恢复原始:ThisDrawing.SendCommand ("CLEANSCREENOFF ") CAD中系统变量决定图形的基本设置。 第一个系统变量:uscicon vba代码如下: …

Flink CDC读取Mysql时,Decimal类型数据异常,变成了字符串(源码解析及解决方案)

1. 问题说明 使用Flink CDC 读取mysql数据时,当表字段为decimal时,读取的数据变成了字符串。 如下示例: 环境: Flink 1.18.0 Flink CDC 3.1.1 mysql 8 mysql的数据如下: 使用Flink CDC读取后的数据如下: 为了方便看,复制出来就是: {“id”:1,“price”:“AZA=”,…

时尚新潮流来袭!Kolors 一键试衣,畅享轻松购物

时尚新潮流来袭!Kolors 一键试衣,畅享轻松购物 解决他们的烦恼话不多说,三键拿下Kolors 优点小结 时尚新潮流:虚拟试衣,开启便捷购物之旅🎀 🌟 你还在为网购试衣服不合适而烦恼吗?现…

OSI和TCP/IP参考模型、协议与端口、DNS解析类型、数据封装

目录 1.OSI和TCP/IP参考模型 1.1 为什么要进行网络分层? 1.2 TCP/IP和OSI参考模型 1.3 TCP/IP参考模型对应协议 2.对应协议和端口 3.基于IP的封装 4.DNS解析类型 5.数据封装与解封过程分析 5.1 封装 1.OSI和TCP/IP参考模型 1.1 为什么要进行网络分层&am…

人工智能如何将人机交互提升到新水平

随着人工智能模型在语音识别和合成、文本处理和多模态性方面的卓越表现,终极语音用户界面可能很快就会无处不在。欢迎来到雲闪世界。 添加图片注释,不超过 140 字(可选) 那是一个典型的星期五下午,我们刚刚结束了一个…