超级构造函数,如果没有超类?

cod*_*leb 3 java polymorphism

我发现了这样一个类:

public class Computer implements Serializable {

        private static final long serialVersionUID = 1L;    

        //...
        public Computer() {
            super();
        }
        //...
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下,这是怎么回事?该类不继承任何超类,仍然可能有"super();" 在构造函数中?

san*_*hat 7

默认情况下,所有类都继承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)