当前位置: 首页 > 面试题库 >

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

仲孙夕
2023-03-14
问题内容

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

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

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

在显式调用构造函数时无法引用“ this”或“ super”

我唯一想解决的是设置方法,将“ this”实例注入到参数对象中。我不想编辑超类。

您是否看到任何更好的解决方法?


问题答案:

编译器确实阻止了您在这里开枪。直到调用超级构造函数之后,B才被完全构造,因此,如果您将此方法(如果编译器允许的话)作为引用传递,并且它在B上调用方法,则B处于无效状态并导致各种棘手的问题(实际上,A尚未初始化,也没有链上的任何类,包括Object)。

显而易见的解决方案是提供B之外的功能,并将其传递给参数的构造函数。特定的解决方案将取决于特定的问题,但是B内部的静态嵌套类(出于相同的原因,它必须是静态的-
内部类对外部类实例具有隐式引用)可以提供该功能。也许您需要重新考虑参数B及其超类之间的关系。这全视情况而定。



 类似资料:
  • 问题内容: 在所有其他与super构造函数一起使用的语言中,都是隐式调用的。如何在Python中调用它?我希望这是行不通的。 问题答案: super()在新样式类中返回类似父对象的对象:

  • 我有课 我还有一个B级 lombok抛出错误,说它找不到()构造函数,显式调用它。我想让lombok做的是给类b提供注释,这样它就生成了以下代码: 我们在龙目岛有注释吗?

  • 自从spring宣布不推荐使用字段注入后,我开始在我的项目中使用构造函数注入。实际上,代码感觉更漂亮,更严格,我可以接受。但我遇到了一个模式,对我来说有点...怪异和冗长: 我有一个抽象的服务bean类(带有注释),它有2个依赖项,直接注入到构造函数中: 然后,我有多个服务bean类(仍然使用注释)扩展抽象服务。我不知道是否还有其他方法,但我发现在每个子类构造函数中注入父级的依赖关系有点冗长和重复

  • 构造函数与析构函数是自动调用的。这些函数的调用顺序取决于执行过程进入和离开实例化对象范围的顺序。一般来说,析构函数的调用顺序与构造函数相反。但图6.9将介绍对象存储类可以改变析构函数的调用顺序。 全局范围中定义的对象的构造函数在文件中的任何其他函数(包括 main)执行之前调用(但不同文件之间全局对象构造函数的执行顺序是不确定的)。当main终止或调用exit函数时(见第18章)调用相应的析构函数

  • 问题内容: 可以这么说,我有一个扩展超类的子类。在什么情况下我需要显式键入以使超类构造函数运行? 我正在看一本书中有关抽象类的示例,当它们使用非抽象子类对其进行扩展时,该子类的默认构造函数为空,并且有一条评论说将调用超类的默认构造函数。同时,我还在这里看到有人未明确致电问题的实例。 与从子类的默认/非默认构造函数调用超类的默认/非默认构造函数有区别吗? 问题答案: 你 永远都不 需要 如果您不指定

  • 问题内容: 构造函数何时被调用? 创建对象之前。 在对象创建期间。 创建对象之后。 问题答案: 分配对象内存,初始化具有初始值的字段变量,然后调用构造函数,但是其代码在对象超类的构造函数代码之后执行。