我想将父类(super class)的实例传递给子类的构造函数。我的第一个想法是在子类中交换父类(super class)的实例,类似于 JavaScript 原型(prototype),但有人告诉我 here Java 不支持交换 super 实例的引用,因为本身不存在 super 实例。
为了避免这个问题,我想使用一个接受父类(super class)实例的复制构造函数。然后,我将不得不手动重新链接所有引用,从长远来看,当其他人扩展父类(super class)的代码并忘记子类中的复制构造函数时,这会引发错误。
问题:是否有一些简洁而好的方法可以自动复制所有引用,也许可以使用一些反射机制来防止将来出现错误?
最佳答案
您不应将所有引用从父类(super class)实例复制到子类实例。顺便说一句,如果所有这些引用在父类(super class)中声明为私有(private)字段(通常应该如此),那么它们甚至不应该从子类访问。
您可能需要的是委派,而不是继承:
// 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 或者(更好)他们应该实现一个通用接口(interface),但这不一定需要。
如果这不能解决您的问题,请告诉我们您想做什么,而不是告诉我们您想如何做。您想解决什么问题?
关于Java浅拷贝子类实例的父类(super class)实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670870/