JAVA學(xué)習(xí):成員內(nèi)部類基本概念及用法
簡單的說,內(nèi)部類就是將一個(gè)類的定義放到另一個(gè)類的定義內(nèi)部。內(nèi)部類分為:成員內(nèi)部類、局部內(nèi)部類、靜態(tài)內(nèi)部類、匿名內(nèi)部類。
成員內(nèi)部類:作為外部類的一個(gè)成員存在,與外部類的屬性、方法并列。
優(yōu)點(diǎn):一方面,內(nèi)部類作為外部類的成員,可以訪問外部類的私有成員或?qū)傩浴#词孤暶鳛閜rivate,但是對(duì)于處于其內(nèi)部的內(nèi)部類還是可見的。)另一方面,可以內(nèi)部類定義在外部類不可訪問的屬性。這樣就在外部類中實(shí)現(xiàn)了比外部類private還要小的額訪問權(quán)限。
注意:
內(nèi)部類是一個(gè)編譯時(shí)的概念,一旦編譯成功,就會(huì)成為完全不同的兩個(gè)類。
對(duì)于一個(gè)名為Outer的外部類和其內(nèi)部定義的名為Inner的內(nèi)部類。編譯完成后出現(xiàn)Outer.class 和 Outer$Inner.class 兩個(gè)類
當(dāng)Outer是一個(gè)private類時(shí),外部類對(duì)于其外部訪問是私有的,所以就無法建立外部類對(duì)象,進(jìn)而也無法建立內(nèi)部類對(duì)象。
局部內(nèi)部類
在方法中第一的內(nèi)部類稱為局部內(nèi)部類。
與局部變量類似,在局部內(nèi)部類前不加修飾符public和private,其范圍為定義它的代碼塊
注意:
在類外不可直接生產(chǎn)局部內(nèi)部類(保證局部內(nèi)部類對(duì)外是不可見的)。
要想使用局部內(nèi)部類時(shí)需要生產(chǎn)對(duì)象,對(duì)象調(diào)用方法,在方法中才能調(diào)用局部內(nèi)部類。
通過內(nèi)部類和接口達(dá)到一個(gè)強(qiáng)制的弱耦合,用局部內(nèi)部類來實(shí)現(xiàn)接口,并在方法中返回接口類型,使局部內(nèi)部類不可見,屏蔽實(shí)現(xiàn)類的可見性。
靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類可以使用public,protected,private修飾
靜態(tài)內(nèi)部類中可以定義靜態(tài)和非靜態(tài)的成員
注意:
一個(gè)靜態(tài)內(nèi)部類不需要一個(gè)外部類的成員:只是靜態(tài)內(nèi)部類和成員內(nèi)部類的區(qū)別。靜態(tài)內(nèi)部類的對(duì)象可以直接生成
這實(shí)際上靜態(tài)內(nèi)部類成為了一個(gè)頂級(jí)類。
靜態(tài)內(nèi)部類不可用private來進(jìn)行定義。
當(dāng)類與接口(或者是接口與接口)發(fā)生方法命名沖突的時(shí)候,此時(shí)必須使用內(nèi)部類來實(shí)現(xiàn)。用接口不能完全地實(shí)現(xiàn)多繼承,用接口配合內(nèi)部類才能實(shí)現(xiàn)真正的多繼承。
匿名內(nèi)部類
匿名內(nèi)部類就是沒有名字的內(nèi)部類。
注意:
匿名內(nèi)部類不能有構(gòu)造函數(shù)
匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類
匿名內(nèi)部類不能是public、protected、private、static
只能創(chuàng)建匿名內(nèi)部類的一個(gè)實(shí)例
一個(gè)匿名內(nèi)部類用其隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類。
因匿名內(nèi)部類為局部內(nèi)部類,所以局部內(nèi)部類的所有限制都對(duì)其生效。
posted on 2011-12-13 15:26 順其自然EVO 閱讀(308) 評(píng)論(0) 編輯 收藏