【问题标题】:how to copy SubClass object in BaseClass copy constructor如何在 BaseClass 复制构造函数中复制 SubClass 对象
【发布时间】:2013-06-02 12:08:55
【问题描述】:

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

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

【问题讨论】:

    标签: java inheritance copy-constructor


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您似乎希望BaseClass 的对象成为扩展BaseClassSubClass 的一个实例。

      有可能吗?

      -没有。这是不可能的。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2015-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多