天天看點

黑馬程式員--匿名内部類問題

------ Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------

 今天,我學習到了匿名内部類的問題,但是卻是一知半解,而且匿名内部類在以後Android開發中會經常用到,是以是很重要的問題,可能有的朋友會和我有一樣的問題,是以就着重重新總結了一下,進一步深入學習和了解。

 1:概述

        A: 匿名内部類

            就是内部類的簡化寫法。

        B: 前提:存在一個類或者接口

            這裡的類可以是具體類也可以是抽象類。

        C: 格式:

            new 類名或者接口名(){

                    重寫方法;

                    }

        D:本質是什麼呢?

            是一個繼承了該類或者實作了該接口的子類匿名對象。

2:注意事項

        A:使用匿名内部類時,我們必須是繼承一個類或者實作一個接口,但是兩者不可兼得,同時也隻能繼承一個類或者實作一個接口。

        B:匿名内部類中是不能定義構造函數的。

        C:匿名内部類中不能存在任何的靜态成員變量和靜态方法。

        D:匿名内部類為局部内部類,是以局部内部類的所有限制同樣對匿名内部類生效。

        E:匿名内部類不能是抽象的,它必須要實作繼承的類或者實作的接口的所有抽象方法。

3:下面接着前面繼續舉例子:

       public class Goods3 {

       public Contents cont(){

               return new Contents(){

                 private int i = 11;

                 public int value() {

                       return i;

                   }

               };

          }

        }

這裡方法cont()使用匿名内部類直接傳回了一個實作了接口Contents的類的對象,看上去的确十分簡潔。

4:當所在的方法的形參需要被内部類裡面使用時,該形參必須為final。

原因:内部類通常都含有回調,引用那個匿名内部類的函數執行完了就沒了,是以内部類中引用外面的局部變量需要是final的,這樣在回調的時候才能找到那個變量,而如果是外圍類的成員變量就不需要是final的,因為内部類本身都會含有一個外圍了的引用(外圍類.this),是以回調的時候一定可以通路到。