默认定义在Object,对所有域进行shallow copy,如果父类里面没有mutable object的属性,可以不复盖clone方法。使用默认的即可。如果有就需要复盖实现deep copy。 @OverrideprotectedObjectclone()throws CloneNotSupportedException{Objectobj=super.clone();/
Couple类实现Cloneable接口,重写Object的clone方法。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 publicclassCoupleimplementsCloneable{privateString name;privateint gender;@OverrideprotectedObjectclone()throws CloneNotSupportedException{returnsuper.clone();}} User类修改clone方法,在clone方法中调用Couple类的c...
Object 类提供的 clone 是只能实现 浅拷贝的。 回到顶部(go to top) 如何实现深拷贝? 深拷贝的原理我们知道了,就是要让原始对象和克隆之后的对象所具有的引用类型属性不是指向同一块堆内存,这里有三种实现思路。 ①、让每个引用类型属性内部都重写clone() 方法 既然引用类型不能实现深拷贝,那么我们将每个引用类型...
System.out.println("Shallow clone: " + shallowClone.getX() + ", " +Arrays.toString(shallowClone.getY())); System.out.println("Deep clone: " + deepClone.getX() + ", " +Arrays.toString(deepClone.getY())); y[0] = 100; System.out.println("After modifying the original object:"); ...
1 protected native Object clone() throws 1、方法由native关键字修饰 native关键字表示这个方法是个本地方法,【java native说明】。而且native修饰的方法执行效率比非native修饰的高。 2、方法由protected修饰 一个类在覆盖clone()方法时候,需要修改成public访问修饰符,这样才能保证其他所有的类都能够访问这个类的这个...
MyObject clone = (MyObject) obj.clone(); 需要注意的是,如果原对象的类没有实现Cloneable接口,那么调用clone()方法会抛出CloneNotSupportedException异常。因此,如果需要实现浅克隆,需要在类定义中实现Cloneable接口。深度克隆(Deep Clone):深度克隆是指创建一个新的对象,并将原对象的所有字段值复制到新对象中,包括...
例如,使用 ObjectOutputStream 和 ObjectInputStream 实现克隆: 代码语言:java AI代码解释 publicstaticObjectdeepClone(Objectobj)throwsIOException,ClassNotFoundException{ByteArrayOutputStreambos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(bos);oos.writeObject(obj);oos.close();ByteArrayIn...
clone(); } } 这个类使用了 Object 的默认 clone 方法,也就是浅拷贝。在调用这个类的 clone 方法时,仅仅会浅拷贝出一个新的 Person 对象,且这种拷贝方法不会调用构造方法。 我们通过如下代码进行拷贝操作: try { Person person1 = new Person("AAA", 30); Person person2 = (Person) person1.clone();...
例如,使用 ObjectOutputStream 和 ObjectInputStream 实现克隆:public static Object deepClone(Object obj...
我们先实现DeepClone类,在类里面实现序列化和反序列化。 package cn.wuzheyi.clone2; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; ...