yls 2019年11月07日
- 拷贝分为引用拷贝和对象拷贝
- 深拷贝和浅拷贝都属于对象拷贝
浅拷贝:通过Object默认的clone方法实现
-
实现Cloneable接口
public class Sheep implements Cloneable
-
重写clone方法
//默认浅拷贝 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }
深拷贝
方式一
-
实现Cloneable接口
public class Sheep implements Cloneable
-
重写并修改clone方法
//深拷贝,方法一 //使用clone方式,要实现Cloneable接口 public Object deepClone() throws CloneNotSupportedException{ Sheep sheep=(Sheep) super.clone(); sheep.setFather((Father) sheep.getFather().clone()); return sheep; }
方式二:通过序列化的方式
-
实现
Serializable
接口//深拷贝,方法二 //通过序列化的方式,要实现Serializable接口 public Object deepClone2() throws Exception { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream); oos.writeObject(this); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())); return ois.readObject(); }