內部類,匿名類,巢狀類

2022-01-28 20:59:07 字數 1372 閱讀 3907

inner class(內部類)定義在類中的類。

nested class(巢狀類)是靜態(static)內部類。1. 要建立巢狀類的物件,並不需要其外圍類的物件。 2. 不能從巢狀類的物件中訪問非靜態的外圍類物件。

anonymous inner class (匿名內部類)匿名的內部類是沒有名字的內部類。

匿名的內部類不能extends(繼承)其它類,但乙個內部類可以作為乙個介面,由另乙個內部類實現。

巢狀類可以作為介面的內部類。正常情況下,你不能在介面內部放置任何**,但巢狀類可以作為介面的一部分,因為它是static 的。只是將巢狀類置於介面的命名空間內,這並不違反介面的規則。

內部類被繼承,由於內部類有乙個指向外圍類物件的秘密引用,所以在繼承內部類的時候,該秘密引用必須被初始化。解決方法是enclosingclassreference.super();語法,看一下**:

class outer

...}

class anoclass extends outer.inner

...}

匿名類(anonymous class)

當乙個內部類的類聲名只是在建立此類物件時用了一次,而且要產生的新類需繼承於乙個已有的父類或實現乙個介面,才能考慮用匿名類,由於匿名類本身無名,因此它也就不存在構造方法,它需要顯示地呼叫乙個無參的父類的構造方法,並且重寫父類的方法。

f.addmousemotionlistener(new mousemotionadapter()

} ); //匿名類結束

存在它的原因是:

1.乙個內部類的物件能夠訪問建立它的物件的實現,包括私有資料。即內部類例項對包含它的哪個類的例項來說,是特權的。

2.對於同乙個包中的其他類來說,內部類能夠隱藏起來,換句話說,內部類不管方法的可見性如何,那怕是public,除了包容類,其他類都無法使用它。

3.匿名內部類可以很方便的定義**。

4.使用內部類可以非常方便的編寫事件驅動程式。

其實它真正的目的僅僅為了定義**--進一步就是事件驅動。

在使用匿名內部類時,要記住以下幾個原則:

·匿名內部類不能有構造方法。  

·匿名內部類不能定義任何靜態成員、方法和類。  

·匿名內部類不能是public,protected,private,static。  

·只能建立匿名內部類的乙個例項。

·乙個匿名內部類一定是在new的後面,用其隱含實現乙個介面或實現乙個類。  

·因匿名內部類為區域性內部類,所以區域性內部類的所有限制都對其生效。

匿名類和內部類中的中的this :

有時候,我們會用到一些內部類和匿名類。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。 這時如果我們要使用外部類的方法和變數的話,則應該加上外部類的類名。

內部類和匿名類

內部類在外部類中有特權 內部類可以毫無限制地訪問外部類的所有成員。編譯之後,內部類也可產生 單獨的.class檔案,檔名為 外部類名 內部類名.class例5.22 內部類使用示例。public class outerclass public static void main string args...

內部類與匿名類

package ray 1 成員內部類 在類重方法外宣告的內部類 1.沒有static修飾的,普通成員內部類 2.被static修飾的,巢狀類 2 區域性內部類 在方法中宣告的內部類 1.普通區域性內部類 2.匿名內部類 1 普通成員內部類 this與.new class outer public ...

JAVA內部類(內建類,巢狀類)

內部類訪問特點 1,內部類可以直接訪問外部類中的成員,包括私有成員 2,外部類要訪問內部類,必須建立內部類的物件 一般用於類的設計 分析事物a時,發現a的描述中還有事物b,而且b還在訪問a的內容 這時b被定義成內部類來描述 如人是乙個類,人身體中的心臟也是乙個類,而且心臟會訪問人體中的血液 血管等物...