如何在BaseClass复制构造函数中复制SubClass对象

时间:2013-06-02 12:08:55

标签: java inheritance copy-constructor

我想在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 个答案:

答案 0 :(得分:3)

这是不可能的。 A类的构造函数为您提供A的实例,无法绕过它。为什么不显式实例化子类?

另一种可能性可能涉及静态工厂方法,如:

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

答案 1 :(得分:1)

您似乎希望BaseClass的对象成为SubClass的实例,其扩展BaseClass

  

甚至可能吗?

-No。这是不可能的。

如果左侧的变量满足左侧变量或类的 IS-A 条件,则instanceof运算符返回true

SubClass IS-A BaseClass,因为它扩展了BaseClass。但BaseClass永远不会是SubClass,因为它无法扩展SubClass

答案 2 :(得分:0)

你好像设计颠倒了。如果您需要按照自己的要求进行操作,那么您需要重新考虑您的设计。理想情况下,在子类构造函数中,您应该通过调用super()来复制或初始化基类属性。