欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

New靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類有什么區(qū)別

吉茹定2年前18瀏覽0評論

New靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類有什么區(qū)別?

內(nèi)部類(Inner Class)和靜態(tài)內(nèi)部類(static Nested Class)的區(qū)別: 定義在一個類內(nèi)部的類叫內(nèi)部類,包含內(nèi)部類的類稱為外部類。內(nèi)部類可以聲明public、protected、private等訪問限制,可以聲明 為abstract的供其他內(nèi)部類或外部類繼承與擴展,或者聲明為static、final的,也可以實現(xiàn)特定的接口。外部類按常規(guī)的類訪問方式使用內(nèi)部 類,唯一的差別是外部類可以訪問內(nèi)部類的所有方法與屬性,包括私有方法與屬性。 (1)創(chuàng)建實例 OutClass.InnerClass obj = outClassInstance.new InnerClass(); //注意是外部類實例.new,內(nèi)部類:

注意是外部類本身,靜態(tài)內(nèi)部類 (2)內(nèi)部類中的this 內(nèi) 部類中的this與其他類一樣是指的本身。創(chuàng)建內(nèi)部類對象時,它會與創(chuàng)造它的外圍對象有了某種聯(lián)系,于是能訪問外圍類的所有成員,不需任何特殊條件,可理 解為內(nèi)部類鏈接到外部類。 用外部類創(chuàng)建內(nèi)部類對象時,此內(nèi)部類對象會秘密的捕獲一個指向外部類的引用,于是,可以通過這個引用來訪問外圍類的成員。 (3)外部類訪問內(nèi)部類 (4)內(nèi)部類向上轉型 內(nèi)部類也可以和普通類一樣擁有向上轉型的特性。將內(nèi)部類向上轉型為基類型,尤其是接口時,內(nèi)部類就有了用武之地。如果內(nèi)部類是private的,只可以被它的外部類問,從而完全隱藏實現(xiàn)的細節(jié)。 (5)方法內(nèi)的類 方法內(nèi)創(chuàng)建的類(注意方法中也能定義類),不能加訪問修飾符。另外,方法內(nèi)部的類也不是在調(diào)用方法時才會創(chuàng)建的,它們一樣也被事先編譯了。 (6)靜態(tài)內(nèi)部類 定義靜態(tài)內(nèi)部類:在定義內(nèi)部類的時候,可以在其前面加上一個權限修飾符static。此時這個內(nèi)部類就變?yōu)榱遂o態(tài)內(nèi)部類。 通常稱為嵌套類,當內(nèi)部類是static時,意味著: [1]要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象; [2]不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象(不能夠從靜態(tài)內(nèi)部類的對象中訪問外部類的非靜態(tài)成員); 嵌 套類與普通的內(nèi)部類還有一個區(qū)別:普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段, 也不能包含嵌套類。但是在嵌套類里可以包含所有這些東西。也就是說,在非靜態(tài)內(nèi)部類中不可以聲明靜態(tài)成員,只有將某個內(nèi)部類修飾為靜態(tài)類,然后才能夠在這 個類中定義靜態(tài)的成員變量與成員方法。 另外,在創(chuàng)建靜態(tài)內(nèi)部類時不需要將靜態(tài)內(nèi)部類的實例綁定在外部類的實例上。普通非靜態(tài)內(nèi)部類的 對象是依附在外部類對象之中的,要在一個外部類中定義一個靜態(tài)的內(nèi)部類,不需要利用關鍵字new來創(chuàng)建內(nèi)部類的實例。靜態(tài)類和方法只屬于類本身,并不屬于 該類的對象,更不屬于其他外部類的對象。 (7)內(nèi)部類標識符 每個類會產(chǎn)生一個.class文件,文件名即為類名。同樣,內(nèi)部類也會產(chǎn)生這么一個.class文件,但是它的名稱卻不是內(nèi)部類的類名,而是有著嚴格的限制:外圍類的名字,加上$,再加上內(nèi)部類名字。 (8)為何要用內(nèi)部類? 1. 內(nèi)部類一般只為其外部類使用; 2. 內(nèi)部類提供了某種進入外部類的窗戶; 3. 也是最吸引人的原因,每個內(nèi)部類都能獨立地繼承一個接口,而無論外部類是否已經(jīng)繼承了某個接口。因此,內(nèi)部類使多重繼承的解決方案變得更加完整。 /** * 總結: * 1.靜態(tài)內(nèi)部類可以有靜態(tài)成員(方法,屬性),而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員(方法,屬性)。 * 2.靜態(tài)內(nèi)部類只能夠訪問外部類的靜態(tài)成員,而非靜態(tài)內(nèi)部類則可以訪問外部類的所有成員(方法,屬性)。 * 3.實例化一個非靜態(tài)的內(nèi)部類的方法: * a.先生成一個外部類對象實例 * OutClassTest oc1 = new OutClassTest(); * b.通過外部類的對象實例生成內(nèi)部類對象 * OutClassTest.InnerClass no_static_inner = oc1.new InnerClass(); * 4.實例化一個靜態(tài)內(nèi)部類的方法: * a.不依賴于外部類的實例,直接實例化內(nèi)部類對象 * OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass(); * b.調(diào)用內(nèi)部靜態(tài)類的方法或靜態(tài)變量,通過類名直接調(diào)用 * OutClassTest.InnerStaticClass.static_value * OutClassTest.InnerStaticClass.getMessage() */

java靜態(tài)方式訪問字段,New靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類有什么區(qū)別