测试代码如下:
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父类带参的构造方法时 会默认调用父类无参构造方法