8

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

public class foo implements Serializable, Comparable {

  int[] startPoint;

  public foo() {

    super();

    startPoint = {5,9};
  }
}

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

4

7 回答 7

11

从任何构造函数中删除该行总是可以的super();,并且扩展类的构造函数没有什么特别的Object。空值超类构造函数的调用总是隐含的,所以无论你是否写下来,你总是得到完全相同的语义。

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

于 2012-11-26T20:28:12.497 回答
8

super()是构造函数中的第一个调用,它是显式或隐式完成的。(当然,您可能需要更改参数以匹配父级的构造函数。)

你的代码:

public foo() 
{
    startPoint = {5,9};
}

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

public foo()
 {
    super();
    startPoint = {5,9};
 }

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

于 2012-11-26T20:20:17.863 回答
7

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

于 2012-11-26T20:19:07.050 回答
2

这只是调用Object()构造函数,就像你有任何其他超类的构造函数没有参数一样。

于 2012-11-26T20:20:02.237 回答
1

正如你所说,有一个超类(对象)。

将调用默认对象构造函数。

于 2012-11-26T20:19:54.210 回答
1

它调用 Object 的构造函数,它是空的(什么都不做)。

于 2012-11-26T20:20:56.030 回答
1

super() always call to the constructor to Object class if the class doesn't extends from one class.

Class Object is the root of the class hierarchy. Every class has Object as a super class. All objects, including arrays, implement the methods of this class.

Check this link

于 2012-11-26T20:24:18.413 回答