Java 在继承体系中实例化对象时的执行顺序

class A {
	private int i=f();
	public A(){
		System.out.println("A的构造方法,i:"+i);
	}
	public  int f(){
		System.out.println("A的方法f(),i:"+i);
		return 1;
	}
}

class B  extends A{
	private int j=f1();
	public B(){
		System.out.println("B的构造方法,j:"+j);
	}
	public  int f1(){
		System.out.println("B的方法f1(),j:"+j);
		return 2;
	}
}

class C extends B {
	boolean  f;
	int k=f2();

	public C(){
		this(3.4);
		System.out.println("C的构造方法,k:"+k);
	}

	public C(double d){
		System.out.println("C(double d)的构造方法");
	}

	public int f2(){
		System.out.println("C的方法f2(),f:"+f);
		return  3;
	}
}

public class SubClassInstanceDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		C c=new C();
		System.out.println(c.k);
	}
}
	在创建C的实例化对象时,进行C的成员变量的默认初始化:f=false,k=0
	然后绑定构造方法参数,进入super()到B中
	进行B中的成员变量默认初始化:j=0
	然后绑定构造方法参数,进入super()到A中
	进行A中的成员变量默认初始化:i=0,
	然后绑定构造方法参数,进入super()到Object中,
	在Object中进行一系列的操作后,回溯到A中,
	进行A的显示初始化,调用了f(),	打印  "A的方法f(),i:0",并为i显示赋值1,
	进入到A的构造方法中:打印"A的构造方法,i:1"
	然后回溯到B中,进行显示初始化:调用f1(),打印"B的方法f1(),j:0" ,并为j赋值2
	进入到B的构造方法:打印"B的构造方法,j:2"
	然后回溯到C中,进行显示初始化:调用f2(),打印"C的方法f2(),f:false",并为k完成赋值3
	进入C的含参数构造方法,打印:"C(double d)的构造方法"
	在进入C的无参数构造方法,打印:"C的构造方法,k:3"
	这样实例化对象的过程完成
	然后:打印c.k得到3

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值