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当做一个普通变量吗?
* @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当做一个普通变量吗?
解决方案 »
- sun公司也会欺骗人的
- 考试题请教!
- java人聚集的地方
- 不用odbc如何用JAVA来连接Access数据库(急)谢谢
- pstmt.setBinaryStream(1, is, (int) (file.length() - 1)); //Why?
- 设置画图XOR模式,使重画时不化和原来相同的部分。
- 如何让jbuilder生成的文件,在没有jbuilder环境的机器上运行? 给分了
- 我的是jre1.4.0的版本。为什么想倒入com.sun.java.swing.border.* 时没有呢??
- 请问如何满足applet访问数据库的限制
- 菜鸟求教,感谢各位大佬
- 【求助!】javac 无法编译
- 自己做的连连看 欢迎大家来测试
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个变量值均没改变,那么输出结果就比较清楚了