为什么在构造函数中调用 super()?

新手上路,请多包涵

我正在处理一个扩展 JFrame 的类。

这不是我的代码,它在开始构建 GUI 之前调用了 super 。我想知道为什么要这样做,因为我一直只是访问超类的方法而不必调用 super();

原文由 mark 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 653
2 个回答

super() 有一个隐式调用,对于所有有父类的类没有参数 - 这是 Java 中的每个用户定义类 - 所以通常不需要显式调用它。但是,如果父的构造函数接受参数,并且您希望指定它们,您 可以 使用对 super() 的调用和参数。此外,如果父构造函数有参数,并且没有默认的无参数构造函数,则 需要 调用 super() 带参数。

例如,显式调用 super() 可以让您对框架的标题进行一些额外的控制:

 class MyFrame extends JFrame
{
    public MyFrame() {
        super("My Window Title");
        ...
    }
}

原文由 AerandiR 发布,翻译遵循 CC BY-SA 3.0 许可协议

对父类的空构造函数 super() 的调用会在您不自己执行时自动完成。这就是您不必在代码中这样做的原因。这是为你做的。

当您的超类没有无参数构造函数时,编译器将要求您使用适当的参数调用 super 。编译器将确保您正确实例化该类。所以这不是你需要担心太多的事情。

无论您是否在构造函数中调用 super() ,都不会影响您调用父类方法的能力。

作为旁注,有些人说,为了清楚起见,通常最好手动进行该调用。

原文由 Tim Pote 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题