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)
编辑:所以如果这样做什么都没有,为什么有人会在代码中明确地写出来?如果我删除该行会有什么不同吗?
super();从任何构造函数中删除该行总是可以的,并且没有特别关于扩展的类的构造函数Object.永远隐含了对nullary超类构造函数的调用,因此无论你是否将它写下来,你总能得到完全相同的语义.
请注意,这意味着如果省略对执行大型操作的超类构造函数的调用,例如启动数据库连接或整个GUI,无论您是否实际编写,都会发生这一切super();.
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()因为您的类没有任何中间父项.