C語言中文網 目錄

Java匿名類,Java匿名內部類

匿名類是指沒有類名的內部類,必須在創建時使用 new 語句來聲明類。其語法形式如下:
new<類或接口>()
{
    //類的主體
};

這種形式的 new 語句聲明一個新的匿名類,它對一個給定的類進行擴展,或者實現一個給定的接口。使用匿名類可使代碼更加簡潔、緊湊,模塊化程度更高。

匿名類有兩種實現方式:
  • 繼承一個類,重寫其方法。
  • 實現一個接口(可以是多個),實現其方法。

下面通過代碼來說明。
public class Out
{
    void show()
    {
        System.out.println("調用 Out 類的 show() 方法");
    }
}
public class TestAnonymousInterClass
{
    //在這個方法中構造一個匿名內部類
    private void show()
    {
        Out anonyInter=new Out()
        {
            //獲取匿名內部類的實例
            void show()
            {
                System.out.println("調用匿名類中的 show() 方法");
            }
        };
        anonyInter.show();
    }
    public static void main(String[] args)
    {
        TestAnonymousInterClass test=new TestAnonymousInterClass();
        test.show();
    }
}

程序的輸出結果如下:
調用匿名類中的 show() 方法
從輸出結果可以看出,匿名內部類有自己的實現。

提示:匿名內部類實現一個接口的方式與實現一個類的方式相同,這里不再贅述。

匿名類有如下特點。

(1) 匿名類和局部內部類一樣,可以訪問外部類的所有成員。如果匿名類位于一個方法中,則匿名類只能訪問方法中 final 類型的局部變量和參數。
public static void main(String[] args)
{
    int a=10;
    final int b=10;
    Out anonyInter=new Out()
    {
        void show()
        {
            //System.out.println("調用了匿名類的 show() 方法"+a);    //編譯出錯
            System.out.println("調用了匿名類的 show() 方法"+b);    //編譯通過
        }
    };
    anonyInter.show();
}

(2) 匿名類中允許使用非靜態代碼塊進行成員初始化操作。
Out anonyInter=new Out()
{
    int i;
    {    //非靜態代碼塊
        i=10;    //成員初始化
    }
    public void show()
    {
        System.out.println("調用了匿名類的 show() 方法"+i);
    }
};

(3) 匿名類的非靜態代碼塊會在父類的構造方法之后被執行。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo