本帖最后由 秦岩 于 2012-4-7 23:48 编辑
- 原因如下:
- abstract class ABSClass{
- public abstract void print();
- }
- public class Test2{
- public static void test(final String s){//一旦参数在匿名类内部使用,则必须是final
- ABSClass c=new ABSClass(){
- public void print(){
- System.out.println(s);
- }
- };
- c.print();
- }
- public static void main(String[] args){
- test("Hello World!");
- }
- }
复制代码 1. 匿名内部类可以使用外部类的变量(局部或成员变来那个)
2. 匿名内部类中不同的方法可以共享这些变量
根据这两点信息我们就可以分析,可能这些变量会在匿名内部类的字段中保存着,并且在构造的时候将他们的值/引用传入内部类。这样就可以保证同时实现上述两点了。
事实上,Java就是这样设计的,并且所谓匿名类,其实并不是匿名的,只是编译器帮我们命名了而已
Java对匿名内部类的实现是通过编译器来支持的,即通过编译器帮我们产生一个匿名类的类名,将所有在匿名类中用到的局部变量和参数做为内部类的final字段,同是内部类还会引用外部类的实例 |