某個類要想實現拷貝的功能,就必須實現Cloneable接口,并覆蓋Object的clone()方法,才能真正實現克隆。淺拷貝,一種默認的實現,Teacher類中的clone方法的實現就是淺拷貝。Student類的clone方法就是深拷貝。注意super.clone返回的對象實際上是被類的對象,可以放心強制轉換,至于為什么,我也不知道,估計得讀虛擬機規范,從Object源碼看也不到什么,因為是protect native Object clone();
記住,如果覆蓋了equals方法,應該也覆蓋hashCode(),因為如果兩個對象相等也就是equals()返回true,那么這兩個對象應該有相同的hashCode。