当前位置:编程学习 > JAVA >>

内部类访问外部类的成员变量,谁能解释一下

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当做一个普通变量吗? --------------------编程问答-------------------- mark..明天来看解释 --------------------编程问答-------------------- 刚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个变量值均没改变,那么输出结果就比较清楚了
--------------------编程问答--------------------
引用 2 楼 xiaos_hui 的回复:
刚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,并且其……

+++++++++
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,