【发布时间】:2011-12-29 17:06:05
【问题描述】:
我想将超类的实例传递给子类的构造函数。我的第一个想法是在类似于 javascripts 原型的子类中交换超类的实例,但我被告知 here Java 不支持交换超实例的引用,因为本身没有超实例。
为了规避这个问题,我想使用一个接受超类实例的复制构造器。然后我将不得不手动重新链接所有引用,从长远来看,当其他人扩展超类的代码并忘记子类中的复制构造函数时,这会引发错误。
问题:是否有一些简洁而好的方法来自动复制所有引用,也许有一些反射机制来防止将来出现错误?
【问题讨论】:
-
我不确定我是否理解你在这里想要做什么。但是在子类中使用
super将使您可以访问超类。public class A{ public void test(){ } } public class B extends A{ public B(){ super.test(); } } -
一个在没有构造函数的情况下工作的丑陋选项是 clone()。 go4expert.com/forums/showthread.php?t=5424
-
在超类中有一个拷贝构造函数,并且从你的子类的拷贝构造函数调用这个拷贝构造函数不是你要找的吗?还是我没有完全理解你的问题?如果您能描述您要解决的问题,也许问题会更清楚
-
是的,直接在超类中使用复制构造函数并从子类中调用它更容易。但我想我明天会重构,看看委托接口解决方案是否不能解决问题。复制构造或克隆似乎太乱了。我真的很期待一些 neet 反射技巧。
标签: java inheritance reflection constructor copy-constructor