某个类要想实现拷贝的功能,就必须实现Cloneable接口,并覆盖Object的clone()方法,才能真正实现克隆。浅拷贝,一种默认的实现,Teacher类中的clone方法的实现就是浅拷贝。Student类的clone方法就是深拷贝。注意super.clone返回的对象实际上是被类的对象,可以放心强制转换,至于为什么,我也不知道,估计得读虚拟机规范,从Object源码看也不到什么,因为是protect native Object clone();
记住,如果覆盖了equals方法,应该也覆盖hashCode(),因为如果两个对象相等也就是equals()返回true,那么这两个对象应该有相同的hashCode。