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

您何时需要显式调用超类构造函数?

叶鹭洋
2023-03-14
问题内容

可以这么说,我有一个扩展超类的子类。在什么情况下我需要显式键入super()以使超类构造函数运行?

我正在看一本书中有关抽象类的示例,当它们使用非抽象子类对其进行扩展时,该子类的默认构造函数为空,并且有一条评论说将调用超类的默认构造函数。同时,我还在这里看到有人未明确致电问题的实例super()

与从子类的默认/非默认构造函数调用超类的默认/非默认构造函数有区别吗?


问题答案:

永远都不 需要

super();

如果您不指定其他任何内容,那将是在那里。您 需要在以下情况下指定要调用的构造函数:

  • 您要调用具有参数的超类构造函数
  • 您想链接到同一类中的另一个构造函数,而不是超类构造函数

您声称:

同时,我还在这里看到有人的问题没有明确调用super()的实例。

你能举个例子吗?我无法想象这怎么可能…



 类似资料:
  • 我目前正在学习Java的继承,我在理解它方面遇到了很大的困难,但是我不能理解的一个主要问题是为什么在下面的示例中有必要调用一个超类构造函数,它有什么帮助?此示例来自Oracle的方法教程。 我最初的想法是,会缩短当前构造函数中参数的代码,它只会接受父类中传入的值并将其添加到子类中(如下所示): 但是,正如我已经知道的那样,这是错误的,并且再次将我带到了真正做什么的问题上。我会非常感谢一些形式的解释

  • 可能的重复: 为什么this()和super()必须是构造函数中的第一条语句? 为什么子类构造函数必须显式调用超类构造函数?这是什么原因呢?

  • 我知道,如果类实现了外部化,它应该有无参数的构造函数,但是如果类没有任何构造函数(就像我的类),java会为它提供空的无参数的构造函数。那为什么我有个错误呢?如果将无参数构造函数()显式添加到类,则一切都将正常。 错误: 线程“main”java.io.InvalidClassException中的异常:a;java.base/java.io.ObjectStreamClass$Exception

  • 问题内容: 我有两个类,和,扩展了前一个类。 具有以下构造函数: 我将注意到所有实例变量都已设置为private。 同时,具有以下构造函数: 但是,这为我的构造函数引发了“找不到符号”错误。 我尝试使用,但是我的超类的私有范围阻止了这种情况。 我发现向我的构造函数中添加字段并允许我调用超级构造函数,但是我想知道是否存在一种无需在子类构造函数中传递其所有参数的情况下调用超级构造函数的方法? 问题答案

  • 问题内容: 考虑以下代码 在我看来,目前有两种方法可以避免这种问题。 要么上A班最后一班。 要么 使getVar方法最终化 作者试图提出防止上述问题的方法。但是,该解决方案似乎很麻烦,因为要遵循一些规则。 http://benpryor.com/blog/2008/01/02/dont-call-subclass-methods-from-a- superclass-constructor/ 除了

  • 为什么第一个输出有柱线 = 空?是因为在创建类 B 之前调用了 B.foo() 吗?如果是,那么为什么可以调用 B.foo()?还是因为 B.foo() 中的字段栏试图从 A 获取柱线字段但无法访问它? 我的问题与链接的问题不同,我不是在问调用顺序,我是在问为什么第一个输出为空?另一个问题不是关于字段或空变量。 我不明白B.foo中的bar变量是如何为空的,如果它是在A和B中定义的。