我有一个A类并编写一个子类B.A只有一个构造函数是参数化的。 B必须调用这个A的超级构造函数。 现在我想使用Object作为参数。该对象应该调用B的方法。因此参数对象必须保存B的引用或必须是内部类。
public B(){
super.(new parameter(this))
}
现在当我想调用构造函数时...... Eclipse说:
在显式调用构造函数
时,不能引用'this'或'super'
我唯一能够解决这个问题的方法是使用set方法将“this”实例注入参数对象。我不想编辑超级班。
你认为有更好的解决方法。
答案 0 :(得分:17)
编译器真的阻止你在这里射击自己。 B在调用超级构造函数之后才完全构造,所以如果你传递它(如果编译器允许它)作为引用,并且它调用B上的方法,则B将处于无效状态并导致各种类型讨厌的问题(事实上,A仍然没有被初始化,链也没有任何类,包括Object)。
显而易见的解决方案是提供B之外的功能并将其传递给参数的构造函数。具体的解决方案将取决于具体的问题,但B内部的静态嵌套类(由于同样的原因需要是静态的 - 内部类具有对外部类实例的隐式引用)可能提供该功能。也许你需要重新考虑参数B和它的超类之间的关系。这一切都取决于具体情况。