在 Java 中,內(nèi)部類(lèi)是定義在另一個(gè)類(lèi)內(nèi)部的類(lèi),與之相對(duì)的是外部類(lèi)。內(nèi)部類(lèi)可以分為四種類(lèi)型:
1.成員內(nèi)部類(lèi)(Member Inner Class):定義在類(lèi)內(nèi)部,方法外部的類(lèi)。
2.局部?jī)?nèi)部類(lèi)(Local Inner Class):定義在方法內(nèi)部或塊內(nèi)部的類(lèi)。
3.匿名內(nèi)部類(lèi)(Anonymous Inner Class):沒(méi)有類(lèi)名的局部?jī)?nèi)部類(lèi)。
4.靜態(tài)內(nèi)部類(lèi)(Static Inner Class):被聲明為 static 的內(nèi)部類(lèi)。
內(nèi)部類(lèi)和外部類(lèi)的區(qū)別和用法如下:
1.內(nèi)部類(lèi)可以直接訪問(wèn)外部類(lèi)的成員變量和方法,即使是 private 的。而外部類(lèi)不能訪問(wèn)內(nèi)部類(lèi)的成員變量和方法。
2.內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)的私有成員變量和方法,這樣就增強(qiáng)了封裝性。
3.內(nèi)部類(lèi)可以實(shí)現(xiàn)多重繼承,一個(gè)內(nèi)部類(lèi)可以實(shí)現(xiàn)多個(gè)接口,而一個(gè)類(lèi)只能繼承一個(gè)父類(lèi)。
4.內(nèi)部類(lèi)可以被用來(lái)實(shí)現(xiàn)一些輔助類(lèi),這些類(lèi)僅在外部類(lèi)中使用,從而實(shí)現(xiàn)了隱藏實(shí)現(xiàn)的細(xì)節(jié)的目的。
5.內(nèi)部類(lèi)可以使代碼更加優(yōu)雅,更加緊湊,更加易讀。
總之,內(nèi)部類(lèi)可以為實(shí)現(xiàn)某些特殊的需求提供一種簡(jiǎn)單、方便的解決方案。