需要Java继承设计技巧

需要Java继承设计技巧

我有一个抽象超类和一些派生类。
我想创建一个方法

createNew()


在派生类上调用时,它将创建派生类的新实例,并带有其所有成员的智能副本。
所有对创建很重要的成员都在抽象类中,因此代码应相同。
我可以在超类中编写createNew()的实现吗?

这样的东西

SonA sonA2 = sonA1.createNew()
SonB sonB2 = sonB1.createNew()


Abs超类应该执行实现,因为代码是相同的。
谢谢。

最佳答案

实现应在抽象类和具体类之间划分。您可以使用“模板方法”模式进行操作:

public abstract class AbstractSon {
    protected abstract AbstractSon createNewImpl();
    public AbstractSon createNew() {
        AbstractSon res = createNewImpl();
        res.name = "default name";
        return res;
    }
}
public class Son1 extends AbstractSon {
    protected AbstractSon createNewImpl() {
        return new Son1();
    }
}
public class Son2 extends AbstractSon {
    protected AbstractSon createNewImpl() {
        return new Son2();
    }
}


您可以不同地划分责任以获得准确的回报类型:

public abstract class AbstractSon {
    protected void prepare(AbstractSon toPrepare) {
        toPrepare.name = "default name";
    }
}
public class Son1 extends AbstractSon {
    public Son1 createNew() {
        Son1 res = new Son1();
        prepare(res);
        return res;
    }
}
public class Son2 extends AbstractSon {
    public Son2 createNew() {
        Son2 res = new Son2();
        prepare(res);
        return res;
    }
}

关于java - 需要Java继承设计技巧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10517672/

10-11 02:54