有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在调用超级构造函数时引用“this”?

我有一个类a,写了一个子类B。a只有一个参数化的构造函数。B必须调用A的超级构造函数。 现在我想使用一个对象作为参数。这个对象应该调用B的方法。所以参数对象必须持有B的引用,或者必须是一个内部类

public B(){
   super.(new parameter(this))
}

现在当我想调用构造函数时,比如。。。Eclipse说:

Cannot refer to 'this' nor 'super' while explicitly invoking a constructor

我看到的唯一能绕过这个问题的方法是一个set方法,将“this”实例注入参数对象。我不想编辑超级类

你觉得有更好的办法吗


共 (1) 个答案

  1. # 1 楼答案

    编译器真的阻止了你在这里自食其果。B在调用超级构造函数之后才完全构造,所以如果您将其作为引用传递(如果编译器允许),并且它调用B上的方法,B将处于无效状态,并导致各种严重问题(事实上,a仍然没有初始化,链上的任何类,包括Object)

    显而易见的解决方案是在B之外提供功能,并将其传递给参数的构造函数。具体的解决方案将取决于具体的问题,但B中的静态嵌套类(出于同样的原因,它需要是静态的——内部类有一个对外部类实例的隐式引用)可能会提供该功能。也许你需要重新考虑参数B和它的超类之间的关系。这取决于具体情况