匿名內部類

匿名內部類是在抽象類及接口的概念之上發展起來的。主要目的就是減少類的定義,如下代碼所示:
現在不使用匿名內部類完成:
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表示的不是常量,只是一個標記而已。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章