簡單談談java中匿名內部類建構函式_java

來源:互聯網
上載者:User

先看看下面的代碼能不能編譯通過:

public static void main(String[] args) {List l1 = new ArrayList();List l2 = new ArrayList(){};List l3 = new ArrayList(){{}};System.out.println(l1.getClass() == l2.getClass() );System.out.println(l2.getClass() == l3.getClass() );System.out.println(l1.getClass() == l3.getClass() );}

答案是能通過編譯,輸出3個false。l1很容易理解,就是聲明了一個

ArrayList對象,那麼l2、l3是什麼呢?

l2是一個匿名類內部類對象,繼承ArrayList;

l3語句有些古怪,帶了兩個大括弧,其實我們這樣寫就會明白了,這也是一個匿名內部類的定義,它的代碼類似如下:

class Sub extends ArrayList {{//初始化代碼塊}}List l3 = new Sub();

看到了吧,就是多了一個初始化代碼塊而已,起到建構函式的功能。當然一個類中的構造代碼塊可以有多個,下面的代碼是可以編譯的:

List l4 = new ArrayList(){{}{}{}};

匿名內部類雖然可以用一個初始化代碼塊來充當建構函式,但其建構函式還是進行了特殊的處理,它在初始化時直接調用父類的同參建構函式,然後在調用自己的代碼塊,例如:

List l5 = new ArrayList(5){{System.out.println("我是匿名內部類");}};

等價於:

class Sub extends ArrayList{{System.out.println("我是匿名內部類");}Sub(int num){super(num);}}List l5 = new Sub(5);

我們來看段範例程式碼

package testtest;  public class Main {    public static void main(String[] args) {     InnerTest inner = new InnerTest();     Test t = inner.get(3);     System.out.println(t.getI());   } }  class Test {    private int i;    public Test(int i) {     this.i = i;   }    public int getI() {     return i;   } }  class InnerTest {    public Test get(int x) {     return new Test(x) {        @Override       public int getI() {         return super.getI() * 10;       }     };   } } 

編譯之後得到4個class檔案:Test.class,InnerTest.class,InnerTest$1.class以及Main.class。容易看出來,Main.class是測試類別的class檔案,Test.class是超類Test的class檔案,InnerTest.class是InnerTest 的class檔案,最值得關注的就是匿名內部類的class檔案InnerTest$1.class。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.