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被定義成內部類來描述 如人是乙個類,人身體中的心臟也是乙個類,而且心臟會訪問人體中的血液 血管等物...