没有Superclass调用super()?

Yoz*_*n22 5 java inheritance constructor

当构造函数调用'super()'而没有除Object之外的任何超类时会发生什么(如果有的话)?像这样:

public class foo implements Serializable, Comparable {

  int[] startPoint;

  public foo() {

    super();

    startPoint = {5,9};
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:所以如果这样做什么都没有,为什么有人会在代码中明确地写出来?如果我删除该行会有什么不同吗?

Mar*_*nik 9

super();从任何构造函数中删除该行总是可以的,并且没有特别关于扩展的类的构造函数Object.永远隐含了对nullary超类构造函数的调用,因此无论你是否将它写下来,你总能得到完全相同的语义.

请注意,这意味着如果省略对执行大型操作的超类构造函数的调用,例如启动数据库连接或整个GUI,无论您是否实际编写,都会发生这一切super();.


Juv*_*nis 8

super()是构造函数中的第一个调用,它是显式地还是隐式地完成的.(但是当然你可能需要更改参数以匹配父的构造函数.)

你的代码:

public foo() 
{
    startPoint = {5,9};
}
Run Code Online (Sandbox Code Playgroud)

编译器从上面的代码中看到了什么:

public foo()
 {
    super();
    startPoint = {5,9};
 }
Run Code Online (Sandbox Code Playgroud)

因此super(),无论您是否将其明确地放在代码中,都会被调用.由于所有类都派生自Object类,因此您调用了Object的构造函数,super()因为您的类没有任何中间父项.

  • 这个讨论是如何最终就数组不是对象的谎言达成一致的?**Java中的每个数组都是`Object`**的子类. (2认同)

Jig*_*shi 6

总有一个超类叫Object,所以它会调用构造函数Object