测试代码如下:
public class Gouzaofangfa { public static void main(String[] args) { new A();//----------------- A()<< System.out.println(); new A(1);//---------------- A(1)<< System.out.println(); new A(1,2);//-------------- A(1,2)<< System.out.println(); /////////////////////////////////////////////////////// System.out.println(); new B();//----------------- A()<< B()<< System.out.println(); new B(1);//---------------- A()<< B(1)<< System.out.println(); new B(1,2);//-------------- A(1,2)<< B(1,2)<< System.out.println(); /////////////////////////////////////////////////////// System.out.println(); new C();//----------------- A()<< B()<< C()<< System.out.println(); new C(1);//---------------- A()<< B()<< C(1)<< System.out.println(); new C(1,2);//-------------- A(1,2)<< B(1,2)<< C(1,2)<< } } class A{ public A(){ System.out.print("A()<< "); } public A(int i){ System.out.print("A("+i+")<< "); } public A(int i,int j){ System.out.print("A("+i+","+j+")<< "); } } class B extends A{ public B(){ //未super父类的构造方法 System.out.print("B()<< "); } public B(int i){ //super父类无参构造方法 super(); System.out.print("B("+i+")<< "); } public B(int i,int j){ //super父类带两个参数的构造方法 super(i,j); System.out.print("B("+i+","+j+")<< "); } } class C extends B{ public C(){ //未super父类的构造方法 System.out.print("C()<< "); } public C(int i){ //未super父类的构造方法 System.out.print("C("+i+")<< "); } public C(int i,int j){ //super父类带两个参数的构造方法 super(i, j); System.out.print("C("+i+","+j+")<< "); } }
输出结果如下:
A()<< A(1)<< A(1,2)<< A()<< B()<< A()<< B(1)<< A(1,2)<< B(1,2)<< A()<< B()<< C()<< A()<< B()<< C(1)<< A(1,2)<< B(1,2)<< C(1,2)<<
结论:
实例化一个类的时候 会最先调用他们父类的构造方法
在这里A是B的父类,而B又是C的父类
所以在实例化C的时候 先实例化A 再实例化B 最后实例化C
一个类有多个构造方法时
如果没有super父类带参的构造方法时 会默认调用父类无参构造方法