继承与初始化

了解包括继承在内的初始化,以对所发生的一切有个全局的把握,是很有用的。

(1)当加载一个类时,如果编译器发现它有父类,那么首先加载父类,如果父类之上还有父类,那就继续加载上面的父类。

(2)接下来,父类的static初始化就会被执行,然后是子类的 static初始化 ,以此类推。这种方式很重要,因为子类的static初始化可能会依赖于父类的成员能否被正确初始化。

(3)至此为此,必要的类都加载完毕,对象就可以创建了。首先,父类对象中所有的成员变量执行初始化(静态的成员变量在上一步已执行了初始化),然后父类的构造器会被调用,接着子类的成员变量执行初始化,子类的构造器被调用。如果还有子类就一直按这个顺序执行下去。

 

代码

package com.thinkingInJava;


class Insect{
	private int i = 9;
	protected int j;
	
	Insect(){
		System.out.println("i=" + i + ",j=" + j);
		j = 39;
	}
	
	private static int x1 = printInit("static Insect.x1 initialized.");
	
	static int printInit(String s){
		System.out.println(s);
		return 47;
	}
}


public class Beetle extends Insect{

	private int k = printInit("Beetle.k initialized..");
	public Beetle(){
		System.out.println("k= " + k);
		System.out.println("j= " + j);
	}
	
	private static int x2 = printInit("static Beetle.x2 initialized.");
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Beetle constructor!");
		Beetle b = new Beetle();
	}

}

 输出:

static Insect.x1 initialized.
static Beetle.x2 initialized.
Beetle constructor!
i=9,j=0
Beetle.k initialized..
k= 47
j= 39

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值