0
我有一个类层次结构/继承这样的:如何将一般的超类实例复制到子类实例?
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
}
}
因此,在有A级与初始化场“名”一个实例一次。后来我希望这个A的实例被包装成B或C的实例。所以超类应该被一个子类包装起来!
我怎样才能使这个最干练的方面呢?
我想过一个构造函数,它和getters/setters做了一些复制。但在这种情况下,我必须重复自己 - 这不再是我对DRY最初的要求了!因此,如何通过初始化B的新字段(使用默认值)并将其余的委托给A中的方法(其知道比B更多的关于A的哪些字段应该被访问...)来如何扭曲A到B ... )。
以相同的方式:
如果A应该被封装成C只在C应该初始化C'S“新”字段,委托给B的涡卷方法的方法(因此inits在C B的“新”字段),并在最后B代表A将其字段复制到C的字段中)。
所以最后我有一个C的新实例,它具有A的值(包括继承层次添加的字段的一些默认初始值)。
但这并不意味着重写超类中的所有getter/setter? 我的意思是将调用委托给超类。即假设A类中的属性名称(带有getName/setName),所以当使用DecoratorPattern类B时不会扩展A类.B仅获得A的引用作为B的构造函数的参数。因此,要调用A的getName()方法B需要有一个方法“getName()”,该方法将此调用委托给A的实例(即B存储为私有字段:例如:return this.instanceOfA.getName ))。 – gerry 2010-05-05 11:25:14