[JAVASE] 类和对象(六) -- 接口(续篇)

目录

一. Comparable接口 与 compareTo方法

        1.1 Comparable接口

        1.2 compareTo方法的重写

                1.2.1 根据年龄进行比较

                1.2.2 根据姓名进行比较

        1.4 compareTo 方法 的使用

        1.3 compareTo方法的缺点(重点) 

二. Comparator接口 与 compare方法

        2.1 Comparator接口

        2.2 compare 方法的重写       

                2.2.1 根据年龄进行比较

                2.2.2 根据姓名进行比较

        2.3 比较器的使用(重要)

三. Cloneable 接口

四. 浅拷贝 与 深拷贝

        4.1 浅拷贝

                4.1.1 实现 Cloneable接口

                4.1.2 在实现类Person中重写 clone 方法

                4.1.3 实现浅拷贝

        4.2 深拷贝 

                4.2.1 实现Cloneable 接口

                4.2.2 在实现类Money中重写clone方法

                4.2.3 实现 深拷贝

        4.3 检验

        4.4 深浅拷贝的画图理解

五. 总结


一. Comparable接口 与 compareTo方法

        1.1 Comparable接口

Comparable接口中只存在一个 compareTo 抽象方法.

public interface Comparable<T>:

<T> 这是泛型, 之后会进行介绍.

public int compareTo(T o):

返回值是 int 型, 可以简单理解为(并不准确, 根据实际情况来比较数据)

this.数据 > o.数据, 返回 正整数. 

this.数据 < o.数据, 返回 负整数.

this.数据 = o.数据, 返回0.

        1.2 compareTo方法的重写

在实现类中重写 compareTo 抽象方法.

                1.2.1 根据年龄进行比较

                1.2.2 根据姓名进行比较

        1.4 compareTo 方法 的使用

直接通过对象的引用 来访问成员方法.

        1.3 compareTo方法的缺点(重点) 

可以发现, compareTo方法的使用相对固定,  因为 调用者是通过直接调用compareTo方法来进行比较, 而不是通过传入比较器. 从而导致无法在 调用方法的时候, 让使用者来决定 根据什么来进行比较.

接下来, 我们来解决这个问题.


二. Comparator接口 与 compare方法

使用者决定 根据什么来进行比较.(传入比较器)

        2.1 Comparator接口

Comparator接口中有多个抽象方法, 但是在实现类中只需要重写 compare 抽象方法.

(因为其他的抽象方法 在实现类中都会进行默认重写)(调用的是Object类中的equals方法)

以下是 C知道的回答:

Comparator接口是Java提供的一个用于比较两个对象大小的接口,它有多个抽象方法,包括compare、equals、reversed等方法。其中,compare方法是必须要实现的,用于比较两个对象的大小。其他的抽象方法则是为了方便用户使用而添加的,可以根据需要选择性地实现。

在实现Comparator接口时,一般只需要重写compare方法就可以了。因为其他抽象方法都有默认实现,如果不需要特别的功能,就可以直接使用默认实现。而且,如果在实现类中没有重写equals或reversed等方法,也不会影响到compare方法的正常使用。

        2.2 compare 方法的重写       

                2.2.1 根据年龄进行比较

                2.2.2 根据姓名进行比较

        2.3 比较器的使用(重要)

这样就灵活了, 调用者在使用的时候传入比较器就可以调用指定的方法进行比较.


三. Cloneable 接口

 

Cloneable接口是一个空接口, 也叫做标记接口, 如果一个类实现了Clonable接口, 表示这个类可以被克隆.


四. 浅拷贝 与 深拷贝

使用 clone 方法来实现浅拷贝 与 深拷贝.

浅拷贝与深拷贝只与实现的代码有关.  

        4.1 浅拷贝

                4.1.1 实现 Cloneable接口

表示Person这个类可以被克隆.

                4.1.2 在实现类Person中重写 clone 方法

在实现类中只是调用了Object类中的clone方法, 最终是通过 父类 Object中的clone方法来实现具体的克隆操作.

                4.1.3 实现浅拷贝

 注意 clone方法的返回值是 Object 类型, 需要进行 向下转型.

        4.2 深拷贝 

在上述的浅拷贝中, 并没有对person1中的 money.money 进行克隆, person1和 person2使用的都还是 原来的 money.money.

这时, 对 person2中的money.money进行修改, 会影响 person1中的money.money. 

这是不合理的, 此时需要进行深拷贝.

                4.2.1 实现Cloneable 接口

表示Money这个类可以被克隆.        

                4.2.2 在实现类Money中重写clone方法

                4.2.3 实现 深拷贝

        4.3 检验

        4.4 深浅拷贝的画图理解


五. 总结

a. Comparable接口 与 compateTo方法 (较固定, 无比较器, 类的实现者实现好了, 调用者来使用)

b. Comparator接口 与 compare方法 (更灵活, 提供比较器, 调用者可以根据实际情况传入比较器进行比较)

c. Cloneable接口 (空接口, 标记接口, 表示这个类可以被克隆)

d. clone方法(深浅拷贝, 深浅拷贝只和实现的代码有关) 

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

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

相关文章

蓝桥杯算法心得——李白打酒(加强版)

大家好&#xff0c;我是晴天学长&#xff0c;记忆化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三维表示记录的结果 3&#xff09;.算法步骤 1…

slint esp32 tokio

源码&#xff1a;https://github.com/xiaguangbo/slint_esp32_tokio cpu 是 esp32c2&#xff0c;屏幕是 ili9341&#xff0c;触摸是 xpt2046&#xff0c;使用 spi 半双工 不使用DMA&#xff08;esp-rs还没支持&#xff09;&#xff0c;SPI 40M&#xff0c;240*320全屏刷新为1.5…

四. TensorRT模型部署优化-模型部署的基础知识

目录 前言0. 简介1. FLOPS2. TOPS3. HPC的排行&#xff0c;CPU/GPU比较4. FLOPs5. FLOPS是如何计算的6. CUDA Core vs Tensor Core总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们…

最小二乘法-超详细推导(转换为矩阵乘法推导,矩阵求导推导)

最小二乘法就是让均方误差最小。 下面是损失函数转换为矩阵方式的详解 如何让其最小&#xff0c;在导数为0的地方取极小值。 问&#xff1a;导数为0的地方可能去极大值&#xff0c;也可能是极小值&#xff0c;凭什么说导数为0就是极小值&#xff1f; 答&#xff1a;因为使用…

酷黑简洁大气体育直播自适应模板赛事直播门户网站源码

源码名称&#xff1a;酷黑简洁大气体育直播自适应模板赛事直播门户网站源码 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 支持PC与手机端同步生成html&#xff08;多端同步生成插件&#xff09; 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无…

某某某加固系统分析

某某某加固系统内核so dump和修复&#xff1a; 某某某加固系统采取了内外两层native代码模式&#xff0c;外层主要为了保护内层核心代码&#xff0c;从分析来看外层模块主要用来反调试&#xff0c;释放内层模块&#xff0c;维护内存模块的某些运行环境达到防止分离内外模块&am…

网上比较受认可的赚钱软件有哪些?众多兼职选择中总有一个适合你

在这个互联网高速发展的时代&#xff0c;网上赚钱似乎成了一种潮流。但是&#xff0c;你是否还在靠运气寻找赚钱的机会&#xff1f;是否还在为找不到靠谱的兼职平台而苦恼&#xff1f; 今天&#xff0c;就为你揭秘那些真正靠谱的网上赚钱平台&#xff0c;让你的赚钱之路不再迷…

Python--List列表

list列表⭐⭐ 1高级数据类型 Python中的数据类型可以分为&#xff1a;数字型&#xff08;基本数据类型&#xff09;和非数字型&#xff08;高级数据类型&#xff09; ●数字型包含&#xff1a;整型int、浮点型float、布尔型bool、复数型complex ●非数字型包含&#xff1a;字符…

整合SSM框架笔记

整合SSM框架笔记 Spring5 Spring MVC MyBatis Druid MySQL Thymeleaf 感谢尚硅谷课程&#xff1a;B站课程 前言 单Spring框架时&#xff0c;是Java工程。 Spring与Spring MVC可以共用一个配置文件&#xff0c;也可以不共用一个&#xff0c;推荐不共用一个。 Spring与Sp…

Quartus 联合 ModelSim 仿真 IP 核(RAM)

文章目录 ModelSim 路径设置创建 RAM进行仿真 本文主要介绍如何在包含 IP 核的 Quartus 项目中使用 Modelsim 进行仿真&#xff0c;本文基于 IP 核 RAM: 2-PORT&#xff0c;其他 IP 核类似。 ModelSim 路径设置 点击 Tools->Options 点击 EDA Tool Options&#xff0c;设置…

string OJ题

下面分享一下string做题心得 1. 明白字符串中存储的数字为0 8 9与0 8 9 完全不同&#xff0c;字符0其实在串中存储的是48&#xff0c;要有意识的转化。字符串中如果存数字8&#xff0c;意味着存了BS&#xff08;退格&#xff09; 例如1&#xff1a; 算出结果为5&#xff0c;存…

Selenium 自动化测试工具<2>(Selenium 常用API的使用方法)

文章目录 浏览器操作浏览器最大化设置浏览器的大小浏览器的前进和后退操作浏览器滚动条 键盘事件单个按键用法键盘组合键用法 鼠标事件不同窗口搜索定位一组元素定位多层框架下拉框定位alert、confirm、prompt 的处理上传文件操作自动截屏 继上一篇文章对 Selenium API 的使用&…

RT-DRET在实时目标检测上超越YOLO8

导读 目标检测作为计算机视觉的核心任务之一&#xff0c;其研究已经从基于CNN的架构发展到基于Transformer的架构&#xff0c;如DETR&#xff0c;后者通过简化流程实现端到端检测&#xff0c;消除了手工设计的组件。尽管如此&#xff0c;DETR的高计算成本限制了其在实时目标检测…

搭建属于自己的 Git 仓库:GitLab

搭建属于自己的 Git 仓库&#xff1a;使用 GitLab 文章目录 搭建属于自己的 Git 仓库&#xff1a;使用 GitLab什么是 GitLab&#xff1f;准备工作安装 Docker使用Docker Compose 快速构建GitLab1、从docker compose快速搭建GitLab2、部署到服务器并访问3、浏览器访问 在现代软件…

【数据结构】------C语言实现二叉树

作者主页&#xff1a;作者主页 数据结构专栏&#xff1a;数据结构 创作时间 &#xff1a;2024年5月20日 一、二叉树的定义 二叉树(Binary Tree) 是由n个结点构成的有限集(n≥0)&#xff0c;n0时为空树&#xff0c;n>0时为非空树。 对于非空树&#xff1a; 有且仅有一个根…

腾讯Java社招面试题真题,最新面试题

Java中synchronized和ReentrantLock有什么区别&#xff1f; 1、锁的实现方式不同&#xff1a; synchronized是JVM层面的锁&#xff0c;主要依赖于监视器对象&#xff08;monitor&#xff09;实现。ReentrantLock是JDK层面的锁&#xff0c;通过Java代码实现&#xff0c;提供了更…

语雀——云知识库/笔记

对于日常进行学习/创作或是记录学习、工作内容与心得的群体来说&#xff0c;能够及时同步的云笔记应用有着广泛的应用场景。近期&#xff0c;我也探索了许多款不同的软件应用&#xff0c;今天来分享一款很有特点的应用——语雀。 语雀&#xff0c;为每一个人提供优秀的文档和知…

1.6 什么是程序-编译与调试

目录 1 程序的作用 2 新建项目及编译运行 2.1 新建项目 2.2 HelloWorld 程序说明 2.3 printf 打印输出 2.4 注释 3 程序的编译过程及项目位置 4 断点及调试窗口设置 5 学习C语言后的境界 1 程序的作用 如下图所示&#xff0c;我们编写了一个可以做加法的程序&#xf…

vue3 vite项目配置了proxy代理情况下查看真实的接口调用地址

vite配置了proxy代理情况下如何查看真实的接口调用地址? 使用vite进行代理 在vite.config.ts配置了代理 在浏览器查看请求头和响应头发现只有代理前的url&#xff0c;没有显示代理后的路径 然后发现一个bypass函数&#xff0c;但是此函数只能修改res响应头的数据&#xff0…

Dockerfile文件详细介绍

前言 Dockerfile是一个文本文件&#xff0c;包含了用于构建Docker镜像的所有命令和说明。它定义了容器的运行环境、依赖以及启动方式&#xff0c;是创建Docker镜像的核心部分。 由于制作镜像的过程中&#xff0c;需要逐层处理和打包&#xff0c;比较复杂&#xff0c;所以Docke…