黑马程序员技术交流社区

标题: 方法中的内部类能不能访问方法中的局部变量 [打印本页]

作者: 崔利鹏    时间: 2012-11-16 18:40
标题: 方法中的内部类能不能访问方法中的局部变量
本帖最后由 崔利鹏 于 2012-11-17 06:58 编辑

方法中的内部类能不能访问方法中的局部变量 ?
作者: 王阳    时间: 2012-11-16 19:37
应该是可以的,我记得需要加final修饰。才可以,表示此值不可改变,这样在内部类里就有了一个此变量的拷贝,可以访问了。不然的话,方法及方法的成员要比内部类的生命周期小,怎么会访问到呢
作者: 王群    时间: 2012-11-16 19:50
可以访问,需要将变量声明为final
作者: 曾观富    时间: 2012-11-16 20:19
可以访问的。引用《Thinking In Java》里的说法:“局部内部类能访问所在方法中的final类型的参数和变量”。 如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的。

示例代码:

public class Tester {  
    public static void main(String[] args) {  
        A a = new A();  
        C c = new C();  
        c.shoutc(a.shout(5));  
    }  
}  
////////////////////////////////////////////////////////  
class A {  
    public void shouta() {  
        System.out.println("Hello A");  
    }  
  
    public A shout(final int arg) {  
        class B extends A {  
            public void shouta() {  
                System.out.println("Hello B" + arg);  
            }  
        }  
        return new B();  
    }  
}  
////////////////////////////////////////////////////////  
class C {  
    void shoutc(A a) {  
        a.shouta();  
    }  
}  
作者: 王玮    时间: 2012-11-16 20:25
方法内部的内部类是局部内部类,它只能访问所在方法中的final类型的参数和变量。
作者: 王玮    时间: 2012-11-17 19:30
iacky2 发表于 2012-11-16 20:25
方法内部的内部类是局部内部类,它只能访问所在方法中的final类型的参数和变量。 ...

好嘞~滔哥




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2