java接口与抽象类,深入浅出java
00-1010 1.比较对象1.1比较对象1.2比较对象2。对象的克隆2.1可克隆性2.2深度拷贝和轻度拷贝3。Object class 3.1等于3.2 toString本文介绍了比较和克隆对象时会用到的接口,然后介绍了一个类:Object。
在Java中,Object类默认是所有类的父类,下面会介绍一些常用的方法。
00-1010在要比较两个对象之前,我们首先需要确定比较的基础。对象中的成员变量太多,无法进行直接比较。
00-1010t是接口的参数,其中填写了要比较的对象的类型。
该接口只有一个compareTo抽象方法,其结构如下:
在类中实现此接口后,可以比较类和类的大小。
00-1010这个接口里有一个抽象方法compare,也是用来比较对象大小的。该方法的结构如下:
与comparator接口不同,ComparatorT接口可以用作Arrays类中sort方法的参数。
如果是包含类元素的数组,可以使用ComparatorT接口对数组进一步排序。
目录
00-1010此接口为空,但类需要实现此接口才能克隆,要覆盖的方法是Object类中的clone()方法。
在IDEA中自动重写的clone()方法如下:
Throws和后面的语句现在不是重点,所以暂时跳过。
因为这个方法的返回值是Object类,所以在使用它的时候记得把结果强制转换成子类。
00-1010既然说到克隆,就不得不提深层复制和浅层复制。我们简单说一下他们的概念:
假设把A的内容复制到B,然后我们修改B的内容,如果A的内容没有变化,那就是深度复制,否则就是浅层复制。
需要注意的是,一个克隆方法是深度复制还是轻度复制,与类中的成员变量和自己写的代码有关。两个不同的类使用相同的克隆方法,一个是深度拷贝,一个是轻度拷贝。这种情况是存在的。
现在有一个如下的类:
类A实现可克隆的{ int I;int j;@Override保护对象clone()抛出CloneNotSupportedException { return super . clone();} @ Override public String to String(){ return“{ I= I ,j= j }”;}}我们在main方法中实例化它,并将其克隆到另一个对象来看看结果:
此时a并没有因为b的改变而改变,clone()是深度拷贝。
让我们转换A类:
B类实现可克隆的{ int k;} A类实现可克隆的{ int I;int j;B c=new B();@Override保护对象clone()抛出CloneNotSupportedException { return super . clone();} @ Override public String to String(){ return { I= I ,j= j ,c . k= c . k } ;}}结果如下:
那么此时克隆是深度复制还是浅层复制呢?
造成这种结果的原因取决于记忆。在A类被修改之前,内存如下:
a类修改后的内存如下:
根据上图,要实现深度复制,需要再次克隆B类的内容,所以需要修改克隆方法。
B类实现可克隆的{ int k;@Override保护对象clone()抛出CloneNotSupportedException { return super . clone();} }类A实现可克隆的{ int I;int j;B c=new B();@Override protected Object clone()抛出CloneNotSupportedException { A tmp=(A)super . clone();tmp . c=(B)this . c . clone();返回tmp} @ Override public String to String(){ return { I= I ,j= j ,c . k= c . k } ;}}
至于你为什么要试着自己画,这里就不说了。
00-1010Object类中有一些常用的方法,这里介绍一下。
00-1010在Object类中,该方法用于比较大小,返回值为布尔值。底层实现逻辑如下:
public boolean equals(Object obj){ return(this==obj);}关于“==”,如果两边的变量都是基本类型变量,比较的就是值是否相同,如果是引用类型变量,比较的就是地址是否相同。
00-1010输出语句System.out.println()的底层调用toString方法。但是如果输出的是引用类型的数据,默认是输出的修改地址,所以这个时候需要重写,这也是上面例子中有toString方法的原因。
本文结束,结束
关于Java在抽象类和接口下的浅显易懂的通关的这篇文章就到此为止。关于Java的抽象类和接口的更多信息,请搜索《流行IT》之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。