本帖最后由 布鲁Go 于 2013-12-4 16:54 编辑
我们知道,内部类定义在局部时,不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
比如:- class Outer
- {
- int x = 3;
- public void method(final int a)
- {
- //final
- int y = 4;
- class Inner
- {
- void function()
- {
- System.out.println(y+","+a+ ","+x);
- }
- }
-
- new Inner().function();
-
- }
- }
- class MyInnerClassDemo3
- {
- public static void main(String[] args)
- {
- Outer out = new Outer();
- out.method(7);
- out.method(8);
- }
- }
复制代码 比如上面的程序,07行 我故意把final 注释掉的话。。是会报错的。。
但是。。在当定义在局部的类是匿名内部类时,如下:
- abstract class AbsDemo
- {
- abstract void show();
- }
- class Outer
- {
- int x = 3;
- public void function()
- {
- new AbsDemo()//这里虽然是匿名内部类,但毕竟是在function内部
- {
- int num = 9;//但为什么这里num作为匿名内部类局部的变量,不需要被final修饰。
- void show()
- {
- System.out.println("num==="+num);//这里就可以直接访问非最终变量num.???
- }
- }.show();
- }
- }
- class MyInnerClassDemo4
- {
- public static void main(String[] args)
- {
- new Outer().function();
- }
- }
复制代码 这个是可以运行的:
第10行这个new AbsDemo(){}/为什么可以运行呢? 它也是定义在局部的内部类啊。。求解释。。。。。
(注:以上例子在毕老师09天的。。。InnerclassDemo3和InnerDemo4里面。。。)
|