父类:
public class Parent {
static String sp = new String( "parent static field" );
static
{ System.out.println( "parent static initializer" ); }
protected String p = new String( "parent instance field" );
{
System.out.println( "parent instance initializer" );
}
public Parent(){
System.out.println( "Parent Constructor" );
}
}
|
子类:
public class Child extends Parent{
static {
System.out.println( "child static initializer" );
}
static String sc = new String( "child static filed" );
{
System.out.println( "child instance initializer" );
}
protected String c = new String( "child instance field" );
public Child(){
System.out.println( "child constructor" );
}
public static void main(String\[\] argc){
Child c = new Child();
}
}
|
当从Child的main开始执行的时(假设Parent和Child俩个类都还没加载),依此执行的代码如下:
1.父类中的static field 或者static initializer(按定义顺序):
static String sp = new String( "parent static field" );
static { System.out.println( "parent static initializer" ); }
|
2.子类中的static field 或者static initializer(按定义顺序):
static
{ System.out.println( "child static initializer" ); }
static String sc = new String( "child static filed" );
|
3.父类中的instance field 或者instance initializer(按定义顺序):
protected String p = new String( "parent instance field" );
{ System.out.println( "parent instance initializer" ); }
|
4.父类构造方法体中的内容
public Parent()
{ System.out.println( "Parent Constructor" ); }
|
5.子类中的instance field 或者instance initializer(按定义顺序):
{ System.out.println( "child instance initializer" ); }
protected String c = new String( "child instance field" );
|
6.子类构造方法体中的内容
public Child()
{ System.out.println( "child constructor" ); }
|