默认定义在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....
out.writeObject(this);//De-serialization of objectByteArrayInputStreambis=newByteArrayInputStream(bos.toByteArray());ObjectInputStreamin=newObjectInputStream(bis);Stateclone=(State) in.readObject();returnclone; } And in the main class, I added this: StateclonedState=state.deepCopy(); Somehow, ...
2. 覆盖Object类的clone()方法 (覆盖clone()方法,将访问修饰符改为public,默认是protected); 3. 在clone()方法中调用super.clone(); public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Student stu = new Student("A"); Student deep = stu.clone();/...
该成员实现Cloneable接口并覆盖clone()方法,不要忘记提升为public可见。 同时,修改被复制类的clone()方法,增加成员的克隆逻辑。 ② 如果被复制对象不是直接继承Object,中间还有其它继承层次,每一层super类都需要实现Cloneable接口并覆盖clone()方法。 与对象成员不同,继承关系中的clone不需要被复制类的clone()做多余的...
一:使用目的: 二:Object中的clone()方法 说明:1.这是一个navtive方法 2.要使用该方法必须继承Object类,因为修饰符为protected 3.返回值为Object,需要强转 使用该方法时:x.clone()!=x为true,对于基础类型来说,在堆内存中创建了一个独立且内容
protected native Object clone() throws CloneNotSupportedException; clone()方法被native关键字修饰,native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是系统或者其他语言来实现。 浅拷贝 浅拷贝可以实现对象克隆,但是存在一些缺陷。
我们先实现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; ...
public void serDeepCopy() throws IOException, ClassNotFoundException { Mao mao=new Mao("short", "red"); d1.setMao(mao); //先把序列化数据放到内存操作流buf中 ByteArrayOutputStream buf = new ByteArrayOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(buf); obs.writeObject(d1)...
publicObjectdeepClone()throwsException{//序列化ByteArrayOutputStreambos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(bos);oos.write(this);//反序列化ByteArrayInputStreambis=newByteArrayInputStream(bos.toByteArray());ObjectInputStreamois=newObjectInputStream(bis);returnois.readObje...
(this.content);}//使用序列化技术实现深克隆publicWeeklyLogdeepClone()throwsIOException,ClassNotFoundException,OptionalDataException{//将对象写入流中 使用了装饰器模式ByteArrayOutputStreambao=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(bao);oos.writeObject(this);//将对象从流中取出...