public class PrivateConstructor { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A(1);
a.getB().print();
}}class A{
int a;

private A(){}

public A(int a){
this.a=a;
}

class B extends A{

int b;

void print(){

System.out.println("B in A " + a);

System.out.println("B in A " + A.this.a);
}
}

B getB(){
return new B();
}


}B in A 0
B in A 1第一个访问的a为什么是0,难道内部类就把这个a当做一个普通变量吗?

解决方案 »

  1.   

    刚debug了一下 
    m.getB().print();中执行m.getB()的时候要走一遍执行A的无参构造方法
    private(){}
    其中执行return new B();
    1.刚开始的时候B对象中的a 和 B均初始化为0 而其中的指向A的变量值为null,
    2然后走一遍A的构造方法private(){},
    其中在1和2之间的时间里对象B中的指向A的变量值由null变为A,并且其中有个属性a=1,这个变量就是m
    现在到执行结束上面提到的3个变量值均没改变,那么输出结果就比较清楚了