Java浅复制子类实例的超类实例

Java浅复制子类实例的超类实例,java,inheritance,reflection,constructor,copy-constructor,Java,Inheritance,Reflection,Constructor,Copy Constructor,我想把一个超类的实例传递给一个子类的构造函数。我的第一个想法是在类似于javascripts原型的子类中交换超级类的实例,但是我被告知Java不支持交换超级实例的引用,因为本质上没有超级实例 为了避免这个问题,我想使用一个接受超类实例的复制构造函数。然后,我将不得不手动重新链接所有引用,从长远来看,当其他人扩展超类的代码并忘记子类中的复制构造函数时,这些引用将引发bug 问题:是否有一种简洁而好的方法可以自动复制所有引用,或者使用某种反射机制来防止将来出现错误?您不应该将所有引用从超类实例复制到

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

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


问题:是否有一种简洁而好的方法可以自动复制所有引用,或者使用某种反射机制来防止将来出现错误?

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

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

// 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,或者(更好)他们应该实现一个公共接口,但这并不一定需要


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

我不确定是否理解您在这里的意图。但是在子类中使用
super
将允许您访问该超类。
public class A{public void test(){}}}public class B扩展了一个{public B(){super.test();}}}
一个没有构造函数的丑陋选项是clone()。在超类中有一个复制构造函数,并且从子类的复制构造函数调用这个复制构造函数,这不是您想要的吗?还是我不完全理解你的问题?如果你能描述你试图解决的问题,那么问题可能会更清楚。直接在超类中使用copy构造函数并从子类调用它会更容易。但我想我明天会进行重构,看看委托接口解决方案是否能做到这一点。复制构造函数或克隆看起来太乱了。我真的仔细检查了一些neet反射技巧。是的,你明白我的问题,但我不想委派,因为这些类是一个干净的继承。如果一行函数委托给另一个实例,那将是大量的额外代码。如果“断开的”克隆是我唯一的选择,我真的只想提取一个公共接口。但是我将回顾代码,也许一个干净的接口会使一些访问模式过时,并编译成一个整洁的接口。