2013-06-02 84 views
0

我想在BaseClass構造函數中拷貝SubClass對象。我需要以下代碼正確執行。如何在BaseClass拷貝構造函數中拷貝SubClass對象

class BaseClass{ 
    BaseClass() {} 
    BaseClass(BaseClass base) { 
     //TODO: how to implement? 
    } 
} 

class SubClass extends BaseClass {  
    SubClass() {} 
} 

public class Test { 
    public static void main(String[] args) { 

     BaseClass sub = new SubClass(); 
     BaseClass subCopy = new BaseClass(sub); 
     if (subCopy instanceof SubClass) { 
      // need to be true 
     } 
    } 
} 

這有可能嗎?如果是,我該怎麼辦?否則我怎樣才能獲得類似的效果?

回答

3

這是不可能的。 A類的構造函數爲您提供了A的實例,但無法規避此情況。爲什麼不明確地實例化子類?

另一種可能性可能包括像靜態工廠方法:

public static BaseClass create(BaseClass input) { 
     // return BaseClass or subclass 
} 
0

你似乎有一個設計上下顛倒。如果你需要做你正在問的問題,那麼你需要重新考慮你的設計。理想情況下,在你的子類構造函數中,你應該通過調用super()來複制或初始化基類屬性。

1

看起來好像你想BaseClass的對象是​​的實例,它擴展了BaseClass

這是可能的嗎?

- 不是。這不可能。

instanceof運算符返回true如果在左側滿足可變IS-A上左側的變量或類的條件。

的​​IS-ABaseClass因爲它延伸BaseClass。但BaseClass永遠不能是​​,因爲它不能延伸​​。