天天看点

匿名内部类

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

现在不使用匿名内部类完成:

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类,对于代码没有太多的必要,所以此时就可以使用匿名内部类了:

                   this.fun(<b>new A(){</b>

<b>                            public void print(){</b>

<b>                                     System.out.println("Hello World!!!") ;</b>

<b>                            }</b>

<b>                   }</b>) ;

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

         public void fun(<b>int i</b>){

                   this.fun(new A(){

                            public void print(){

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

                            }

                   }) ;

public class Demo17{

                   new C().fun(10) ;

       编译时会出现以下的错误:

Demo17.java:11: 从内部类中访问局部变量 i;需要被声明为最终类型

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

                                                                           ^

1 错误

       如果要想从方法中定义的内部类,访问方法中的参数,则方法参数的声明处必须加“final”。

       public void fun(final int i) ;  

<b>注意:</b>

此final表示的不是常量,只是一个标记而已。

本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/96927,如需转载请自行联系原作者