我发现了这样一个类:
public class Computer implements Serializable {
private static final long serialVersionUID = 1L;
//...
public Computer() {
super();
}
//...
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,这是怎么回事?该类不继承任何超类,仍然可能有"super();" 在构造函数中?
默认情况下,所有类都继承java.lang.Object.所以你班上的隐藏代码是
public class Computer extends java.lang.Object implements Serializable {
private static final long serialVersionUID = 1L;
//...
public Computer() {
super(); //here Object's default constructor is called
}
//...
}
Run Code Online (Sandbox Code Playgroud)
如果父类具有默认构造函数(无参数),并且子类定义了默认构造函数,则不需要显式调用父的构造函数.
Java隐式地执行它,换句话说,Java 在子构造函数的第一个语句super()之前放置
考虑这个例子
class Base {
public Base() {
System.out.println("base");
}
}
class Derived extends Base {
public Derived() {
//super(); call is not necessary.. Java code puts it here by default
System.out.println("derived");
}
}
Run Code Online (Sandbox Code Playgroud)
所以当你创建Derived d = new Derived();输出时..
base
derived
Run Code Online (Sandbox Code Playgroud)