由一道面试题所想到的--Java实例变量初始化
题目是这样的:求下面程序的输出: public class Base { private String baseName = "base" ; public Base () { callName(); } public void callName () { 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 b = new Sub(); } } 很显然一开始我也做错了,原因很简单,这道题目考察什么我大概知道,可是之前在学习类的加载机制时对类的初始化过程还比较了解,但实例变量的初始化过程比较模糊。这里还牵扯的难点有:继承的时候子类的同名属性不会覆盖父类,会将父类的属性隐藏;在父类的构造函数里面调用虚函数引起多态的变态代码。 接下来查看了一下 深入Java虚拟机(Bill Venners著) 等才对该问题有了清楚的认识。下面我会尽量简单而清晰的将其分析的透彻明了。 前面我在JAVA类加载和初始化