Object 类提供的 clone 是只能实现 浅拷贝的。 回到顶部(go to top) 如何实现深拷贝? 深拷贝的原理我们知道了,就是要让原始对象和克隆之后的对象所具有的引用类型属性不是指向同一块堆内存,这里有三种实现思路。 ①、让每个引用类型属性内部都重写clone() 方法 既然引用类型不能实现深拷贝,那么我们将每个引用类型...
(Object类中的clone()方法是protected的)。 在子类重写的时候,可以扩大访问修饰符的范围。 3.在派生类的clone()方法中,调用super.clone()。 因为在运行时刻,Object类中的clone()识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。 Cloneable接口。
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:"); ...
默认定义在Object,对所有域进行shallow copy,如果父类里面没有mutable object的属性,可以不复盖clone方法。使用默认的即可。如果有就需要复盖实现deep copy。 @OverrideprotectedObjectclone()throws CloneNotSupportedException{Objectobj=super.clone();//do some deep copy.returnobj;} 1. 2. 3. 4. 5. 6. 3....
Cloneable 接口 和 clone 方法 在上面两个例子中,拷贝是通过覆写Object.clone方法来完成的,但如果覆写这个方法,就需要类能够实现Cloneable接口,否则在调用clone时会出现CloneNotSupportedException异常。不过接口仅仅是做个标记,标记这个类是支持clone方法的。
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...
4、Object.clone 方法名字实在是混淆视听,但对于 JDK,这种错误一旦犯了也就没改正机会了,属于 bug ...
在Java中,实现浅克隆通常意味着你需要重写对象的clone()方法。Java中的Object类提供了一个默认的clone()方法,但这个默认实现是受保护的,因此你需要让你的类实现Cloneable接口(尽管这个接口是一个标记接口,没有任何方法),并且重写clone()方法以使其为public。
}publicObjectclone()throwsCloneNotSupportedException{DeepClonecloned=(DeepClone)super.clone(); cloned.reference = (ReferenceType) reference.clone();returncloned; } } 复制代码 使用第三方库:可以使用一些第三方库,如Apache Commons Lang的SerializationUtils类,通过其clone()方法实现深度克隆。