用于子类实例的Java浅拷贝超类实例

时间:2011-12-29 17:06:06

标签: java inheritance reflection constructor copy-constructor

我想将超类的实例传递给子类的构造函数。我的第一个想法是在子类中交换超类的实例,类似于javascripts原型,但我被告知here Java不支持交换超级实例的引用,因为本身没有超级实例

为了避免这个问题,我想使用一个接受超类实例的copy constructur。然后,我将不得不手动重新链接所有引用,从长远来看,当其他人扩展超类的代码并忘记子类中的复制构造时,会引发错误。

问题:是否有一些简洁明了的方法可以自动复制所有引用,也许有一些反映机制来防止将来出现错误?

1 个答案:

答案 0 :(得分:1)

您不应将超类实例中的所有引用复制到子类实例。顺便说一句,所有这些引用甚至不能从子类中访问,如果它们被声明为超类中的私有字段(通常应该如此)。

您可能需要的是委托,而不是继承:

// Foo is the superclass
private class FooAdapter {
    private Foo foo;

    public FooAdapter(Foo foo) {
        this.foo = foo;
    }

    public void doThis() {
        return foo.doThis();
    }
}

FooAdapter可以扩展Foo或(更好)他们应该实现一个通用接口,但不一定需要。

如果这不能解决您的问题,请告诉我们您想要做什么,而不是告诉我们您想怎么做。你想解决的问题是什么?