java的继承类中调用哪个构造函数

java的继承类中调用哪个构造函数

编者:李国帅

qq:9611153 微信lgs9611153

时间:2016/11/17

背景原因:

求证:如果父类有多个构造函数,子类调用哪一个。

 

初步结论:

java的继承类如果定义新的构造函数,且没有对应的父类构造函数,会调用父类的空参构造函数。

public class Hello {

    class a {

       a() {

           System.out.println("a()");

       }

    }

 

    class b extends a {

       b(int x) {//父类没有a(int x)

           System.out.println("b("+x+")");

       }

    }

 

    public static void main(String[] args) {

       Hello h = new Hello();

       b b1 = h.new b(2);

       System.out.println("b1 : " + b1.toString());

 

       System.exit(0);// 必须使用这个进行返回。

    }

 

}

 

会顺序调用a(){} 和b(x){},打印如下

a()

b(2)

b1 : [email protected]

使用super函数指定父类构造器:

如果想调用父类的非空参构造函数,需要super指定

 

java的继承类中调用哪个构造函数

测试结果:

java的继承类中调用哪个构造函数

 

注意:

如果存在父类的空参构造函数,不使用super函数,不管有无相同参数的父类构造函数,调用的都是父类的空参构造函数

 

java的继承类中调用哪个构造函数