天天看點

匿名内部類

匿名内部類是在抽象類及接口的概念之上發展起來的。主要目的就是減少類的定義,如下代碼所示:

現在不使用匿名内部類完成:

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,如需轉載請自行聯系原作者