public class Base { private String baseName = "base"; public Base() { callName(); } public void callName() { // TODO Auto-generated method stub System.out.println(baseName); } static class Sub extends Base { private String baseName = "sub"; public void callName() { System.out.println(baseName); } } public static void main(String[] args) { Base sub = new Sub(); } }
以上结果输出什么呢?null
分析:分配好内存空间之后,初始化的顺序为 :父类静态块、子类静态块、父类初始化语句、父类构造器、子类初始化语句、子类构造器。父类构造器执行的时候,调用了子类的覆写方法,然而子类的类字段还在刚初始化阶段,刚完成内存布局,只能输出null
原文:http://www.cnblogs.com/dev-lipengfei/p/4858587.html