內部類與匿名內部類的概念與使用

2021-07-29 17:38:43 字數 1384 閱讀 5114

以前android開發的時候,有時候會看到內部模擬如定義adapter的viewholder和匿名內部模擬如各種事件等。但是對於內部類與匿名內部類的概念以及裡面的一些細節卻比較模糊,如今我總結如下:

內部類是定義在類中的類。內部類的主要作用是將邏輯上相關的類放到一起。

匿名類是特殊的內部類,沒有類名。在定義類的同時,就生成該類的乙個例項,並且不會在其他地方用到該類,所以不用起名字,因而又稱匿名內部類。

內部類可以看作是外部類的乙個成員,與一般類相同,內部類可以擁有自己的成員變數與成員方法,通過建立內部類物件,可以訪問其成員變數和呼叫成員方法。下面具體看乙個簡單的例項:

public

class person

public

void

output()

}//外部類方法中呼叫內部類方法,可以發現內部類方法與外部類方法可以相同。

public

void

output()

public

static

void

main(string args)

}

分析:其實在內部類物件中儲存了乙個對外部類物件的引用,當在內部類的成員方法中訪問某一變數時,如果在該方法和內部類中都沒有定義過這個變數,(如果有這個變數的話,或者外部類的某個成員變數與內部類的成員變數相同,eg:在內部類中定義private string name;那麼訪問的則是內部類的這個變數)呼叫就會被傳遞給內部類中的那個對外部類物件的引用,通過這個引用去呼叫這個變數。在內部類呼叫外部類的方法也是同樣的乙個道理(還是這個內部類物件儲存了乙個對外部類的引用)。

內部類總結:內部類可以宣告成private或protected,訪問原則是,在外部類中,通過乙個內部類的物件引用內部類中的成員;而在內部類中,可以直接引用外部類的成員。包括靜態成員、例項成員、私有成員。當然,內部類也可以通過建立物件從外部類之外被呼叫,但是內部類必須宣告成public的。

注意:內部類如果被宣告成static,則靜態內部類將自動轉化為「頂層類」,即它沒有父類,而且不能引用外部類成員或其他內部類中的成員。非靜態內部類不能宣告靜態成員,只有靜態內部類才能宣告靜態成員。

建立匿名內部類的用意:主要是用來彌補內部類中沒有定義到的方法,並能有效的簡化程式**。

public

class noperson

}.setname("張三");

}static class inner

}

匿名內部類通常用來編寫「事件」的程式**。

內部類與匿名內部類

內部類 內建類,巢狀類。將類定義在另乙個類中,該類就是內部類。類中定義的類中就是內部類。其實類的定義位置發生了一點小變化。訪問方式 內部可以直接訪問外部類中的成員。外部類想要訪問內部類,需要建立內部類物件。什麼時候定義內部類呢?當分析乙個事物時,該事物的內部還有具體的事物,這個具體的事物在使用該事物...

內部類與匿名內部類

內部類 定義 在類中定義乙個類,那麼這個類就是內部類。內部類的定義格式 成員方法 1.通過外部類方法,建立內部類物件,呼叫內部類方法。2.外部類.內部類 物件名 new 外部類 內部類 成員變數 1.外部類的成員變數,內部類中直接使用。2.內部類的成員變數,外部類不能直接訪問。需要建立內部類物件,用...

Java內部類與匿名內部類

定義在類中方法之外的內部類分為例項內部類和靜態內部類.例項內部類自動持有外部類的例項的引用,即可以訪問外部類的所有變數 靜態內部類可以直接訪問外部類的靜態成員 定義在方法中的內部類叫區域性內部類,該類只能訪問被final修飾的區域性變數和引數 介面定義如下 inte ce super 例子1 pub...