java接口与抽象类,深入浅出java

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: