java 类的继承,实例化一个类时 构造方法的调用顺序

测试代码如下:

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父类带参的构造方法时 会默认调用父类无参构造方法

猜你喜欢

转载自blog.csdn.net/u010756046/article/details/80644619