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指定
测试结果:
注意:
如果存在父类的空参构造函数,不使用super函数,不管有无相同参数的父类构造函数,调用的都是父类的空参构造函数