如何将一般超类实例复制到子类实例?

时间:2010-05-05 10:00:07

标签: java inheritance hierarchy

我有这样的类层次结构/继承:

public class A {
    private String name;
    // with getters &  setters
    public void doAWithName(){
        ...
    }
}

public class B extends A {
    public void doBWithName(){
        // a differnt implementation to what I do in class A
    }
}

public class C extends B {
    public void doCWithName(){
        // a differnt implementation to what I do in class A and B
    }
}

因此,有一次有一个带有初始化字段“name”的A类实例。后来我希望这个A实例被包装到B或C的实例中。所以超类应该用子类包装!

如何才能使DRY最有效? 我已经考虑过使用getter / setter进行一些复制的构造函数。但在这种情况下,我必须重复自己 - 这不再尊重我最初的DRY要求了!

那么,如何通过初始化B的新字段(使用默认值)并将其余部分委托给A中的一个方法(它比B更知道应该访问A的哪个字段......)来将A转换为B. 。

以同样的方式:
如果A应该被包装到C中,那么c中的一个方法应该是init C的'new'字段,委托给B的wrap方法(因此在C中的B''新'字段),最后B委托给A,它将它的字段复制到C)的领域。

所以最后我有一个新的C实例,其中包含A的值(以及继承层次结构添加的字段的一些默认初始值)。

1 个答案:

答案 0 :(得分:2)

您似乎只想实施Decorator Pattern