下面的代码中外部类访问了内部类的私有成员,运行成功,为什么?
public class Outer {
    public class Inner {
        private int i=0;
        private Inner() {
            this.i=1;
        }
    }    public Inner getInner() {
        return new Inner();
    }    public static void main(String[] args) {
        Outer outer = new Outer();
        Inner inner = outer.getInner();
        System.out.println(inner.i);
    }
}
下面的代码运行成功,为什么???
public class Outer {
    public class Inner {
        private int i=0;
        private Inner() {
            this.i=1;
        }
    }    public Inner getInner() {
        return new Inner();
    }    public static void main(String[] args) {
        Outer outer = new Outer();
        Inner inner = outer.getInner();
        System.out.println(inner.i);
    }
}

解决方案 »

  1.   

    因为main(String[] args) 是 Outer 的方法啊,Inner是Outer的内部类,Outer当然能调用咯
      

  2.   

    是要休息一下了啊
    内部类现在用得还是比较多
    可能在jdk7就不会用那么多了哦
    可能大部分要被"闭包函数"代替
    去sun看看啊
      

  3.   

    楼主代码理解错误,main算是类内部的方法,不算是外部类,如果你用第二个类调用会调用不了的。那才是外部类。
      

  4.   

    main方法难道不是Outer这个外部类的方法?
      

  5.   

    main方法不是Inner类的方法,为何能访问Inner的私有成员?
      

  6.   

    我认为,应该从包含关系上来解释,首先,变量i在类Inner里,而Inner又在Outer里,也就是说,Inner是i的爸爸,而Outer是i的爷爷,所以,我们可以说,i即属于Inner内部又属于Outer内部的成员,根据sun的文档
    private modifier—the field is accessible only within its own class
    我们可以认为,在Outer里也可以访问到i成员变量