[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六)

马肤
摘要:本篇内容关于Java SE中的类和对象,重点介绍了接口的概念。作为续篇,文章深入探讨了接口的特性,包括其在Java编程语言中的重要性、如何声明和实现接口,以及与抽象类和实现类的区别。文章强调接口在代码组织、模块化和扩展性方面的优势,是Java面向对象编程的重要组成部分。

目录

一. 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 抽象方法.

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第1张

public interface Comparable:

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

public int compareTo(T o):

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

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

this.数据

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

        1.2 compareTo方法的重写

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

                1.2.1 根据年龄进行比较

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第2张

                1.2.2 根据姓名进行比较

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第3张

        1.4 compareTo 方法 的使用

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第4张

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

        1.3 compareTo方法的缺点(重点) 

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第5张

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第4张

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

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


二. Comparator接口 与 compare方法

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

        2.1 Comparator接口

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

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

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第7张

以下是 C知道的回答:

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

在实现Comparator接口时,一般只需要重写compare方法就可以了。因为其他抽象方法都有默认实现,如果不需要特别的功能,就可以直接使用默认实现。而且,如果在实现类中没有重写equals或reversed等方法,也不会影响到compare方法的正常使用。[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第8张

        2.2 compare 方法的重写       

                2.2.1 根据年龄进行比较

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第9张

                2.2.2 根据姓名进行比较

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第10张

        2.3 比较器的使用(重要)

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第11张

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


三. Cloneable 接口

 [JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第12张

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


四. 浅拷贝 与 深拷贝

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

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第13张

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

        4.1 浅拷贝

                4.1.1 实现 Cloneable接口

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第14张

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

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

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第15张

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

                4.1.3 实现浅拷贝

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第16张 注意 clone方法的返回值是 Object 类型, 需要进行 向下转型.

        4.2 深拷贝 

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

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

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

                4.2.1 实现Cloneable 接口

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第17张

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

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

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第18张

                4.2.3 实现 深拷贝

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第19张

        4.3 检验

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第20张

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第21张

        4.4 深浅拷贝的画图理解

[JAVASE] 类和对象(六) -- 接口(续篇),JAVASE系列,接口续篇 - 深入解析类与对象(六) 第22张


五. 总结

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

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

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

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


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码