序列化:
Student s = new Student("xianming","男",20);Teacher t = new Teacher(40,"lihua",s);Teacher t1;ObjectOutputStream teacher = new ObjectOutputStream(new FileOutputStream("teacher"));teacher.writeObject(t);teacher.close();File file = new File("teacher");ObjectInputStream res = new ObjectInputStream(new FileInputStream(file));t1 = (Teacher) res.readObject();s.setAge(12);
参考博客:Java对象的序列化(Serialization)和反序列化详解
深浅拷贝:
- 一定要实现Cloneable接口,并重写clone方法。
 - 重写clone方法的时候,调用的是super.clone(),而不是this.clone(),第一次使用的时候写成了this,结果栈溢出,应该调用父类的clone方法,即Object类的clone方法。
 - 如果要做深拷贝,被拷贝的对象里有其他对象,需要让其他对象也实现Cloneable接口,并重写clone方法
 - 重要:如果子对象重写了clone方法,父对象需要在自己的clone方法里引用子对象的clone方法,而且是第二种写法。第一次写的时候写成了第一种,是错的,因为被克隆的就是一个新的对象,不能在clone去修改自己的属性了。
 
protected Teacher clone() throws CloneNotSupportedException {this.s = s.clone();return (Teacher) super.clone();}
protected Teacher clone() throws CloneNotSupportedException {Teacher t = (Teacher) super.clone();t.s = s.clone();return t;}
