没有Superclass调用super()?

时间:2012-11-26 20:18:30

标签: java inheritance constructor

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

public class foo implements Serializable, Comparable {

  int[] startPoint;

  public foo() {

    super();

    startPoint = {5,9};
  }
}

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

7 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:8)

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

您的代码:

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

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

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

如果类没有从一个类扩展,

super()总是调用构造函数到Object类。

  

Class Object是类层次结构的根。每个类都将Object作为超类。所有对象(包括数组)都实现此类的方法。

Check this link