[JAVASE] 类和对象(六) -- 接口(续篇)
CSDN 2024-06-14 14:35:27 阅读 53
目录
一. 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 实现浅拷贝
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方法(深浅拷贝, 深浅拷贝只和实现的代码有关)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。