当构造函数调用'super()'而没有除Object之外的任何超类时会发生什么(如果有的话)?像这样:
public class foo implements Serializable, Comparable {
int[] startPoint;
public foo() {
super();
startPoint = {5,9};
}
}
编辑:所以如果这样做什么都没有,为什么有人会在代码中明确地写出来?如果我只是删除那一行会有什么不同吗?
答案 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作为超类。所有对象(包括数组)都实现此类的方法。