【问题标题】:Does Object's constructor call super()? Which superclass constructor would that call? [duplicate]Object 的构造函数是否调用 super()?那会调用哪个超类构造函数? [复制]
【发布时间】:2017-09-13 23:59:22
【问题描述】:

如果Object 类包含编译器生成的默认构造函数,那么它必须有一个super(); 声明。如果有这个声明,那么它调用的是哪个父类构造函数?怎么做?

因为Object 是所有类的父类,我认为如果我在Object 类构造函数中调用super();,那么它应该会给我们编译时错误,因为我们知道Object 不会从任何东西继承。

class Test
{
    Test()
    {
        super();
    }
    public static void main(String[] args)
    {
        Test t = new Test();
    }
}

【问题讨论】:

  • Object 不必调用超类构造函数。
  • "那么它必须有一个 super()" 为什么?对象很特别,因为它是所有事物的终极 super
  • 但是每个默认构造函数都必须有 super();代码,
  • 我想如果我调用 super();在 Object 类构造函数中 你是如何更改Object 类代码的?
  • java中的所有类默认都必须继承java.lang.Object类,所以你在类的构造函数中调用supper()没有问题。

标签: java constructor


【解决方案1】:

没有。 JLS-8.8.9. Default Constructor 说(部分)

如果声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数只会调用不带参数的超类构造函数。

【讨论】:

  • 这里有个技巧。如果您认为 JLS 报价回答了问题,请复制该报价的一部分并使用site:stackoverflow.com 在 Google 上查找。它可以帮助我找到 50% 的重复项。 (虽然,诚然,这里没有必要。)
  • 我遇到了一个术语“原始”对象。经过搜索,我发现原始类是没有直接超类的类,例如 Object。这是正确的吗?
  • @AmarnathKumarSah 是的。 java.lang.Object 是原始类。
  • 是的,因为你知道我也知道这一点:如果声明的类是原始类 Object,那么默认构造函数的主体为空。否则,默认构造函数只是调用不带参数的超类构造函数。非常感谢@Elliott
  • @ElliottFrisch 可以告诉我:如何知道我的类是否具有默认构造函数?有什么办法知道吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多