1. 程式人生 > >匿名內部類特點及注意

匿名內部類特點及注意

匿名內部類的特點及注意:

  1. 匿名內部類也就是沒有名字的內部類,無class關鍵字,直接使用new來生成一個物件的引用正因為沒有名字,所以匿名內部類只能使用一次
  2. 匿名內部類還有個前提條件:必須繼承一個父類(抽象類,普通類)或實現一個介面(兩者不可兼得,並且只能是一個),它相當於一個具體類(只是沒有名字),所以可以使用new
  3. 不能存在任何的靜態成員變數和靜態方法。
  4. 不能是抽象的,它必須要實現繼承的類或者實現的介面的所有抽象方法。 無建構函式,使用構造(空白)程式碼塊進行初始化
  5. 當所在的方法的形參需要被內部類裡面使用時,該形參必須為final,為了拷貝引用避免引用值發生改變

稍微說下new時的情況:

new 一個匿名內部類、介面或者抽象類實際上是執行3步的合併,即:
a.先定義一個子類,讓該子類繼承上述介面或實現上述抽象類;
b.然後new一個該子類的物件;
c.將該子類的一個引用賦值給介面或者抽象類變數(它是依據java多型特性:父類指向子類的引用)。

所以我個人覺得new不是對抽象類(普通類)或介面直接new的,而是對繼承他的子類new的。它的名字是外部類名字$1,如Test$1

為什麼我們使用匿名內部類:

  1. 實現偽多重繼承
  2. 方便定義回撥
  3. 對於其他類來說能夠隱藏起來

PS.