内部类的存在是基于外部类的实例存在的,内部类就好像是跟这个外部类的成员变量或方法一样存在
他的存在是为了extends一些类或实现某些接口
试想一个成员方法怎么可以访问到人家的变量,
她能访问的就是类的成员和方法,如果真的要访问到就要通过间接访问(通过该局部变量的方法或其它来访问)

解决方案 »

  1.   

    内部类在编译后都会产生一个新的Class文件的.匿名类在概念上与命名内类一样,即完全在另一个类的界限内定义的类.只是在句法上与命名的内部类不同.
      

  2.   

    我认为是 既然是局部变量,那它就应该是存在外部类的方法中,因此也就只有该方法内的类才能访问该局部变量,并且该局部变量必须是final。你不是该方法中的类,怎么可能见到局部变量呢。
      

  3.   

    如果你定义了一个匿名的inner class,比且希望用到定义于inner class之外的某个对象,
    编译器会限制该外部对象为final
      

  4.   

    编译成两个class文件的,当然不能访问
      

  5.   

    来晚了,也混分,呵呵
    匿名内部类实际是内部类extends某一个类的一种方式,只是这个类没有类名,(classjava(原始野人)已说)内部类的存在是基于外部类的实例存在的,内部类就好像是跟这个外部类的成员变量或方法一样存在,一般是写在一个外部类的方法当中,它可以访问外部类的成员变量,也可以访问此内部类所在的方法中所定义的变量,当然,其它方法中所定义的变量不能被它所访问,如要访问此内部类所在的方法的形参,则形参必须为final.见<<java编程思想>>P267
      

  6.   

    谁说匿名内部类不能访问局部成员,请看例程:
    public class AnonInnerClass {
        private String str = "test!!";    public Object dest() {
            Object f = new Object() {            public String toString() {
                    return AnonInnerClass.this.str;
                };
            };
            return f;
        }    public static void main(String[] args) {
            AnonInnerClass a = new AnonInnerClass();
            Object b = a.dest();
            System.out.println(b.toString());
        }
    }可以访问的。
      

  7.   

    匿名类有两种,一种是作为一个类的成员(如zhaoqiubo(小熊杰利米)所举 ),这种情况下,内隐类完全可以访问外部类的局部成员,
    另一种是作为一个方法的成员,下面有例,这种情况有点特殊,由于方法的作用域是在执行过后就over的,就是方法成员也就销毁了。所以为了使该方法中的内隐类仍能访问方法成员,就必须将成员变量声明为final,这样,该内隐类就可以保存方法成员变量的拷贝,即使方法销毁也能保证内隐类不出访问不到成员变量的错。
    public class Outer{
       private int m;
       public void go(int x, final int y){
          int a;
          final int b;
          class Inner {
            public void method() {
              System.out.println("m="+m); 
              System.out.println("x="+x); //不合法
              System.out.println("y="+y);  
              System.out.println("a="+a); //不合法
              System.out.println("b="+b);
            }
          }
    }
      

  8.   

    匿名内部类可以访问类的变量,但是只能访问方法中的fianl变量。
      

  9.   

    public class Outer{
       private int m = 0;
       public void test(){
          int y = 0;
       }
       public void go(final int x){
          int n = 0;
          class Inner {
            public void method() {   
                //////////////
            }
          }
    }--------------------------------------------------
    楼主:你确定Inner.method是要访问m, n, x, y 中的哪一个先,m, n 直接访问, y加final可以访问, x 就不行了
      

  10.   

    匿名内部类如果要访问一局部变量的话,那这个局部变量必须定义为final变量!
    不然就不能访问!
      

  11.   

    To sunzq13(陡金山) : 你所举例为内部类,而 并非匿名内部类!可以访问类的私有成员。。
    哦。。原来说的是参数啊。对不起。我还以为是类的私有成员呢我理解错了。 呵呵
      

  12.   

    回复 xq_zz() ( ) 信誉:100  2004-11-26 21:09:00  得分: 0  举个例子看看!
      

  13.   

    可以访问,但变量要是final的。