package demo;
/**
*
* @author Administrator
* think in java the forth edition
*
*/
public class ConstractInit extends PortableLunch
{
private Meal m=new Meal();
private Cheese cheese=new Cheese();
private Bread b=new Bread();
public ConstractInit()
{
/*
* 1.在任何事物发生之前,将分配给对象的存储空间初始化成二进制的0
* 2.调用构造方法时,默认会调用父类的构造方法,此时成员变量还未初始化,此步骤会一直递归调用父类的构造方法,
* 直到根基类(Bread)没有父类(所有的成员变量均为初始化)
* 3. 到达根基类后,然后开始初始化成员变量,成员变量初始化完成之后,执行构造器主体,
* 主体调用完成之后然后递归开始(与第一步相反方向)初始化其子类的成员变量,直到最底层的子类(此示例为ConstractInit)
* 4 最底层的子类(ConstractInit)成员变量初始化完成之后,开始执行自身构造器主体
*/
System.out.println("ConstractInit");
}
public static void main(String[] args)
{
new ConstractInit();
}
}
class Meal
{
private int a=initMeal();
Meal()
{
System.out.println("Meal");
}
private int initMeal()
{
System.out.println("Meal attribute initazlized");
return 1;
}
}
class Bread
{
private int b=initBread();
public Bread()
{
System.out.println("Bread");
}
private int initBread()
{
System.out.println("Bread attribute initazlized");
return 1;
}
}
class Cheese
{
private int c=initCheese();
public Cheese()
{
System.out.println("Cheese");
}
private int initCheese()
{
System.out.println("Cheese attribute initazlized");
return 1;
}
}
class Lettuce
{
public Lettuce()
{
System.out.println("Lettuce");
}
}
class Lunch extends Meal
{
private int d=initLunch();
public Lunch()
{
System.out.println("Lunch");
}
public int initLunch()
{
System.out.println("Lunch attribute initazlized");
return 1;
}
}
class PortableLunch extends Lunch
{
private int e=initPortableLunch();
PortableLunch()
{
System.out.println("PortableLunch");
}
public int initPortableLunch()
{
System.out.println("PortableLunch attribute initazlized");
return 1;
}
}
最后打印结构为:
Meal attribute initazlized
Meal
Lunch attribute initazlized
Lunch
PortableLunch attribute initazlized
PortableLunch
Meal attribute initazlized
Meal
Cheese attribute initazlized
Cheese
Bread attribute initazlized
Bread
ConstractInit