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