0

我想在 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
        }
    }
}

甚至可能吗?如果是,我该怎么做?否则我怎样才能得到类似的效果?

4

3 回答 3

3

这是不可能的。A 类的构造函数为您提供了 A 的实例,没有办法规避这一点。为什么不显式地实例化子类?

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

public static BaseClass create(BaseClass input) {
       // return BaseClass or subclass
}
于 2013-06-02T12:14:05.883 回答
1

似乎您希望对象成为extendsBaseClass的实例。SubClassBaseClass

甚至可能吗?

-不。这不可能。

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

SubClass IS-A BaseClass因为它扩展了BaseClass. 但是 theBaseClass永远不能是 a SubClass,因为它不能扩展SubClass

于 2013-06-02T14:46:37.317 回答
0

你似乎有一个颠倒的设计。如果您需要按照您的要求做,那么您需要重新考虑您的设计。理想情况下,在您的子类构造函数中,您应该通过调用 super() 来复制或初始化基类属性。

于 2013-06-02T12:17:44.370 回答