這樣做可以調用Asub的克隆方法嗎?或者Asub深度克隆正確?如果沒有,有沒有辦法通過這種方法來推動深度克隆阿斯布?在Java中克隆對象[3個問題]
abstract class Top extends TopMost {
protected Object clone() {
Object obj = super.clone();
// deep copy and try catch
}
}
abstract class A extends Top {
protected Object clone() {
Object obj = super.clone();
// deep copy and try catch
}
}
class Asub extends A {
protected Object clone() {
Object obj = super.clone();
// deep copy and try catch
}
public void doSomethingNew() {
}
}
abstract class TopMost {
public void someMethod() {
Top a = (Top) super.clone();
// more code here
}
}
public class Main {
public static void main(String... args) {
Asub class1 = new Asub();
class1.someMethod();
}
}
不幸的是,如果'ASub'進一步子類化,子類'clone()'可能不會調用'super.clone()',因爲它返回一個'ASub',而不是一個'ASubSub'。所以這隻有在完全控制整個類層次結構時纔有效(並仔細記錄了他/她的後繼者的不合格克隆實現)。 – 2010-09-06 16:28:29
@PéterTörök,我完全同意你的意見。 – 2010-09-06 16:51:18
感謝您的回覆傢伙 – Joset 2010-09-06 17:01:46