我想在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
}
}
}
甚至可能吗?如果是,我该怎么办?否则我怎么能得到类似的效果?
答案 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()来复制或初始化基类属性。