当构造函数调用“super()”而没有除 Object 之外的任何超类时会发生什么(如果有的话)?像这样:
public class foo implements Serializable, Comparable {
int[] startPoint;
public foo() {
super();
startPoint = {5,9};
}
}
编辑:所以如果这什么都不做,为什么有人会在代码中明确地写出来?如果我只是删除那行会有什么不同吗?
当构造函数调用“super()”而没有除 Object 之外的任何超类时会发生什么(如果有的话)?像这样:
public class foo implements Serializable, Comparable {
int[] startPoint;
public foo() {
super();
startPoint = {5,9};
}
}
编辑:所以如果这什么都不做,为什么有人会在代码中明确地写出来?如果我只是删除那行会有什么不同吗?
从任何构造函数中删除该行总是可以的super();
,并且扩展类的构造函数没有什么特别的Object
。空值超类构造函数的调用总是隐含的,所以无论你是否写下来,你总是得到完全相同的语义。
请注意,这意味着如果您省略了对执行大型操作(例如启动数据库连接或整个 GUI)的超类构造函数的调用,那么无论您是否实际编写super();
.
super()
是构造函数中的第一个调用,它是显式或隐式完成的。(当然,您可能需要更改参数以匹配父级的构造函数。)
你的代码:
public foo()
{
startPoint = {5,9};
}
编译器从上面的代码中看到:
public foo()
{
super();
startPoint = {5,9};
}
super()
无论您是否将其明确地放在代码中,都会调用它。由于所有类都派生自Object
类,因此您正在调用 Object 的构造函数,super()
因为您的类没有任何中间父级。
总是有一个超类被调用Object
,所以它会调用构造函数Object
这只是调用Object()
构造函数,就像你有任何其他超类的构造函数没有参数一样。
正如你所说,有一个超类(对象)。
将调用默认对象构造函数。
它调用 Object 的构造函数,它是空的(什么都不做)。
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.