父类:
|
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"); }
|