Java如何实现克隆

  介绍

小编给大家分享一下Java如何实现克隆,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

具体如下:

1,浅复制(浅克隆)这种浅复制,其实也就是把被复制的这个对象的一些变量值拿过来了。最后生成学生二还是一个新的对象。

public  class  CloneTest1   {   public 才能;static  void  main (String [], args), throws 例外   {才能   ,,,Student1  student =, new 学生一();   ,,,student.setAge (24);   ,,,student.setName (“niesong");   ,,,Student1  student2 =,(学生1)student.clone ();   ,,,//这个是调用下面的那个方法,然后把这个这个对象克隆到的学生   ,,,System.out.println(“年龄:“,+,student2.getAge(), +,,,,, +,“名字:“,+,student2.getName ());   ,,,System.out.println(“- - - - - - - - - - - - - - - - - - -产生绯闻;);   ,,,student2.setAge (23);   ,,,//克隆后得到的是一个新的对象,所以重新写的是学生二这个对象的值   ,,,System.out.println (student.getAge ());   ,,,System.out.println (student2.getAge ());   ,,}   }//克隆的对象必须实现可克隆这个接口,而且需要重写克隆方法   class  Student1  implements 可克隆   {   private 才能;int 年龄;//才能定义为私人说明这个成员变量只能被被当前类中访问,如果外部需要获得,那么就只能通过getAge方法进行获取   private 才能;String 名称;   public 才能;int  getAge ()   {才能   ,,,return 年龄;   ,,}   public 才能;void  setAge (int 年龄)   {才能   ,,,this.age =,年龄;   ,,}   public 才能;String  getName ()   {才能   ,,,return 名称;   ,,}   public 才能;void  setName (String 名称)   {才能   ,,,this.name =,名称;   ,,}   @Override才能   public 才能;Object 克隆(),throws  CloneNotSupportedException   {才能   ,,,Object  Object =, super.clone ();   ,,,return 对象;   ,,}   }

运行结果:

癑ava如何实现克隆"

2,深复制(情况1使用的是在克隆的时候手动进行深克隆)

public  class  CloneTest2   {   public 才能;static  void  main (String [], args), throws 例外   {才能   ,,,Teacher  Teacher =, new 老师();   ,,,teacher.setAge (40);   ,,,teacher.setName (“teacher  zhang");   ,,,Student2  Student2 =, new 学生二();   ,,,student2.setAge (14);   ,,,student2.setName (“lisi");   ,,,student2.setTeacher(老师);   ,,,Student2  student3 =,(学生二)student2.clone ();   ,,,//这里是深复制,所以这时候学生二中的老师就是老师这个对象的一个复制,就和学生三是学生二的一个复制   ,,,//所以下面teacher.setName只是对他原来的这个对象更改,但是复制的那个并没有更改   ,,,System.out.println (student3.getAge ());   ,,,System.out.println (student3.getName ());   ,,,System.out.println (student3.getTeacher () .getAge ());   ,,,teacher.setName (“teacher  niesong");//不会又任何影响   ,,,System.out.println (student3.getTeacher () . getname ());   ,,}   }   class  Student2  implements 可克隆   {   private 才能;int 年龄;   private 才能;String 名称;   private 才能;Teacher 教师;   public 才能;int  getAge ()   {才能   ,,,return 年龄;   ,,}   public 才能;void  setAge (int 年龄)   {才能   ,,,this.age =,年龄;   ,,}   public 才能;String  getName ()   {才能   ,,,return 名称;   ,,}   public 才能;void  setName (String 名称)   {才能   ,,,this.name =,名称;   ,,}   public 才能;Teacher  getTeacher ()   {才能   ,,,return 教师;   ,,}   public 才能;void  setTeacher (Teacher 老师)   {才能   ,,,this.teacher =,老师;   ,,}   @Override才能   public 才能;Object 克隆(),throws  CloneNotSupportedException   {才能   ,,,//这一步返回的这个学生二还只是一个浅克隆,   ,,,Student2  Student2 =,(学生二)super.clone ();   ,,,//然后克隆的过程中获得这个克隆的学生二,然后调用这个getTeacher这个方方法得到这个老师对象,然后实现克隆。在设置到这个学生二中的老师。   ,,,//这样实现了双层克隆使得那个老师对象也得到了复制。   ,,,student2.setTeacher((老师)student2.getTeacher () .clone ());   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java如何实现克隆