匿名内部类

匿名内部类是在抽象类及接口的概念之上发展起来的。主要目的就是减少类的定义,如下代码所示:
现在不使用匿名内部类完成:
interface A{

         public void print() ;

}

class B implements A{

         public void print(){

                   System.out.println("Hello World!!!") ;

         }

};

class C{

         public void fun(A a){

                   a.print() ;

         }

         public void fun(){

                   this.fun(new B()) ;

         }

};

public class Demo15{

         public static void main(String args[]){

                   new C().fun() ;

         }

};

       但是现在假设说B类只使用一次,那问是否还有必要进行单独的声明呢?则会发现如果声明了B类,对于代码没有太多的必要,所以此时就可以使用匿名内部类了:
interface A{

         public void print() ;

}

class C{

         public void fun(A a){

                   a.print() ;

         }

         public void fun(){

                   this.fun(new A(){

                            public void print(){

                                     System.out.println("Hello World!!!") ;

                            }

                   }) ;

         }

};

public class Demo15{

         public static void main(String args[]){

                   new C().fun() ;

         }

};

       如果现在方法中,有参数了,问匿名内部类是否可以访问呢?
interface A{

         public void print() ;

}

class C{

         public void fun(A a){

                   a.print() ;

         }

         public void fun(int i){

                   this.fun(new A(){

                            public void print(){

                                     System.out.println("Hello World!!! i = " + i) ;

                            }

                   }) ;

         }

};

public class Demo17{

         public static void main(String args[]){

                   new C().fun(10) ;

         }

};

       编译时会出现以下的错误:
Demo17.java:11: 从内部类中访问局部变量 i;需要被声明为最终类型

                                System.out.println("Hello World!!! i = " + i) ;

                                                                           ^

1 错误

       如果要想从方法中定义的内部类,访问方法中的参数,则方法参数的声明处必须加“final”。
       public void fun(final int i) ;  
注意:

final表示的不是常量,只是一个标记而已。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章