匿名内部類是在抽象類及接口的概念之上發展起來的。主要目的就是減少類的定義,如下代碼所示:
現在不使用匿名内部類完成:
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,如需轉載請自行聯系原作者