------ 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),是以回調的時候一定可以通路到。