若是构造方法的第一行没有显式的使用super(…)或者this(…)。那么java默认都会调用super()。
含义是调用父类的无参数构造方法、这里的super()可以省略
也就说说,每创建一个对象,java都会自动的调用这个对象的父类的构造方法,最高到Object类之后,再从Object类的构造方法逐一结束,最后完成这个对象的构造方法。
实例:
public class Temp {
public static void main(String[] args) {
System.out.println("创建一个Child类的对象");
Child ch = new Child();
}
}
class Father{
public Father() {
System.out.println("这里是Father类的构造器");
}
}
class Child extends Father{
public Child(){
System.out.println("这里是Child类的构造器");
}
}
这里运行的结果为:
创建一个Child类的对象
这里是Father类的构造器
这里是Child类的构造器。
因为若是构造方法的第一行没有显式的使用super(…)或者this(…)。那么java默认都会调用super()。所以以下代码和上面的代码完全相同。
public class Temp {
public static void main(String[] args) {
System.out.println("创建一个Child类的对象");
Child ch = new Child();
}
}
class Father{
public Father() {
super(); //构造方法的第一句总是super() 无论写与不写;
System.out.println("这里是Father类的构造器");
}
}
class Child extends Father{
public Child(){
super(); //构造方法的第一句总是super() 无论写与不写;
System.out.println("这里是Child类的构造器");
}
}
测试:如果子类构造器的第一行已经显示的指明了this()来调用子类其他的构造器,是否还会隐式的在构造器中执行super();
public class Temp2 {
public static void main(String[] args) {
Child2 ch = new Child2();
}
}
class Father2{//父类
public Father2() {
System.out.println("父类构造方法");
}
}
class Child2 extends Father2{ //子类
public Child2(String str) {
System.out.println(str);
}
public Child2() {
this("子类第一个构造方法"); //显示的调用了该子类它的构造方法
System.out.println("子类第二个构造方法");
}
}
运行结果:
父类构造方法
子类第一个构造方法
子类第二个构造方法
这个例子说明即是构造方法的第一行调用了this(),也会在this()之前默认的执行super();