欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-03 08:52:17
...

测试代码如下:


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