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

avatar
作者
筋斗云
阅读量:0

目录

一. 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方法(深浅拷贝, 深浅拷贝只和实现的代码有关) 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!