[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…

python文件IO之pickle 模块读写对象数据

可以向一个文件中写入字符串&#xff0c;读取后也是读取字符串形式&#xff0c;但是不能直接向文件中写入像列表这样的对象&#xff0c;需要 pickle 等模块才行。 pickle 模块介绍 pickle 模块使用强大且有效的算法来进行序列化和反序列化。 序列化是指将一个对象转换为能够存…

前端面试手册

前端面试手册 岗位职责&#xff1a; 1&#xff0e;熟悉公司业务&#xff0c;能独立高效高质地完成任务&#xff0c;负责功能的开发、测试、上线、维护&#xff1b; 2&#xff0e;负责推动、优化前端基础架构、组件抽象&#xff0c;提升开发效率&#xff1b; 3&#xff0e;关…

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

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

记一次Spark cache table导致的数据问题以及思考

目前在做 Spark 升级(3.1.1升级到3.5.0)的时候&#xff0c;遇到了cache table导致的数据重复问题&#xff0c;这种情况一般来说是很少见的&#xff0c;因为一般很少用cache table语句。 当然该问题已经在Spark3.5.1已经解决了,可以查看对应的 SPARK-46995和SPARK-45592 从以上的…

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

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

android ndc firewall 命令type 黑名单 白名单差异

可以看到以白名单方式使能防火墙&#xff0c;fw_FORWARD fw_INPUT fw_OUTPUT 的操作是DROP或REJEDCT。即默认所有应用不允许上网&#xff0c;需要 XXX:/ # ndc firewall enable whitelist 200 0 Firewall command succeeded XXX:/ # iptables -t filter -L Chain INPUT (polic…

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

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

【HSQL001】HiveSQL内置函数手册总结(更新中)

1.熟悉、梳理、总结下Hive SQL相关知识体系。 2.日常研发过程中使用较少&#xff0c;随着时间的推移&#xff0c;很快就忘得一干二净&#xff0c;所以梳理总结下&#xff0c;以备日常使用参考 3.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 文章目录 1.函数清单 1.函数清…

某某某加固系统分析

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

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

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

等保测评的流程是怎样的

等保测评概述 等保测评&#xff0c;即信息安全等级保护测评&#xff0c;是指对信息系统安全性能进行等级评估的过程。其目的是通过评估系统的安全性能&#xff0c;为系统提供一个安全等级&#xff0c;并规定相应的保护措施。等保测评的流程通常包括定级、备案、安全建设、等级测…

Python--List列表

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

TypeScript-type注解对象类型

type注解对象类型 在TS中对于对象数据的类型注解&#xff0c;除了使用interface之外还可以使用类型别名来进行注解&#xff0c;作用类似 type Person {name: stringage: number }const p:Person {name: lily,age: 16 } type 交叉类型&模拟继承 类型别名配合交叉类型…

docker创建的rabbitmq,启动容器时报:Failed to create thread: Operation not permitted (1)

原因&#xff1a;docker内的用户权限受限 启动docker时加上参数 --privilegedtrue docker run --privilegedtrue -d --name rabbitmq --restartalways -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 15671:15671 -p 25672:25672 -v /home/rabbitmq/data/:/var/rabbitm…

整合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;设置…

BeanFactory、FactroyBean、ApplicationContext

BeanFactory Ioc容器、定义接口规范来管理spring bean的生命周期、依赖、注入&#xff0c;spring中有各种Ioc容器 FactroyBean 定制的工厂Bean&#xff0c;可以通过抽象工厂方式创建的bean&#xff0c;不纳入spring的生命周期、依赖、注入特性&#xff0c;相当于spring给第三…

string OJ题

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