public class Ex_4_28 {
public static void main(String [] args){
Outer1 out=new Outer1();
out.inner.showOutVar();
}
}class Outer1{
private int outVar=0;
Inner inner=new Inner(); public class Inner{
public void showOutVar(){
outVar++;
System.out.println(outVar);
}
}
}
问题:这个输出结果为什么是2呢?
蓝色的inner是Inner类的实例吗?
public static void main(String [] args){
Outer1 out=new Outer1();
out.inner.showOutVar();
}
}class Outer1{
private int outVar=0;
Inner inner=new Inner(); public class Inner{
public void showOutVar(){
outVar++;
System.out.println(outVar);
}
}
}
问题:这个输出结果为什么是2呢?
蓝色的inner是Inner类的实例吗?
inner是Inner的实例
public static void main(String [] args){
Outer1 out=new Outer1();
Outer1.Inner obj=new Outer1().new Inner();
Outer1.Inner o=out.new Inner();
obj.showOutVar();
o.showOutVar();
out.inner.showOutVar();
}
}class Outer1{
private int outVar=0;
Inner inner=new Inner(); public class Inner{
public void showOutVar(){
outVar++;
System.out.println(outVar);
}
}
}
是这样一段不好意思- -
多了蓝色的
Outer1 out=new Outer1();//new 了一个Outer1实例 out
Outer1.Inner obj=new Outer1().new Inner();//new 了一个Inner 实例 obj
Outer1.Inner o=out.new Inner();//new 了一个Inner实例 o
obj.showOutVar();// 对象obj outVar=1;
o.showOutVar();//o对象 使得 outVar=1;
out.inner.showOutVar();// out对象属性outVar=2; Inner是Outer1的内部类
这样不知道你能不能理解,,,画一下内存变化图就清楚了。
Outer1 out=new Outer1();//new 了一个Outer1实例 out
Outer1.Inner obj=new Outer1().new Inner();//new 了一个Inner 实例 obj
Outer1.Inner o=out.new Inner();//new 了一个Inner实例 o
obj.showOutVar();// 对象obj outVar=1;
o.showOutVar();//o对象 使得 outVar=1;
out.inner.showOutVar();// out对象属性outVar=2; Inner是Outer1的内部类
这样不知道你能不能理解,,,画一下内存变化图就清楚了。
是通过这句产生的:
Outer1.Inner obj=new Outer1().new Inner();每个外围类拥有两个内部类Inner的对象。对于out 是 out.inner和o; 对于"noname",是 "noname.inner"和obj。所以o 和out.inner 操作的是一个outVar变量,(楼主可以再加几个输出语句o.showOutVar()和out.inner.showOutVar() 验证)。而obj操作的是"noname"的outVar, 输出obj.showOutVar()与o.showOutVar()和out.inner.showOutVar()没有关系。
为什么会变成2的呢??楼主是这里不明白吧??
我是这样理解的 ,因为Inner类要先实例化然后才会实例化外面那个类的,所以Outer的变量就变成了1.然后在进行++运算之后就变成2了 我也是个新手 可能理解的不太到位 或许也理解错了 ,以上还是仅供参考吧 肯定有高手来给你解释的 。。
加油!!!
因为两个指向的对象不同,所以o和obj指向的单位也不同。而o=out.new Inner(),和out.inner指向的是同一单位,所以对于成员变量会有重复操作。可以这样理解么?
刚开始总把out和new Outer1()认为是对等的