您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Java中有哪些內(nèi)部類,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
??每個內(nèi)部類都能獨立地繼承自一個(接口的)實現(xiàn),所以無論外部類是否已經(jīng)繼承了某個(接口的)實現(xiàn),對于內(nèi)部類沒有影響。
成員內(nèi)部類
為啥?因為靜態(tài)變量和方法不依賴對象,僅與類有關(guān)。在加載靜態(tài)域時,根本沒有外部類。所以在非靜態(tài)內(nèi)部類中不能定義static變量和方法,編譯會不通過。
內(nèi)部類對于外部類來說,相當(dāng)于一個成員變量。內(nèi)部類可以使用任意訪問控制符
內(nèi)部類的方法可以直接訪問外部類的數(shù)據(jù),而不受訪問控制符的影響
創(chuàng)建內(nèi)部類對象方法:外部類.內(nèi)部類 對象名 = 外部類對象.new 內(nèi)部類()
編譯之后產(chǎn)生兩個class文件:Outer.class 和 Outer$Inner.class
內(nèi)部類中不能存在任何static的變量和方法
靜態(tài)內(nèi)部類:用static修飾的內(nèi)部類
靜態(tài)內(nèi)部類訪問外部類的非靜態(tài)成員:不能直接訪問,需要 new 外部類().成員
如果訪問外部類的static成員(名稱與內(nèi)部類相同):“類名.靜態(tài)成員”
如果訪問外部類的static成員(名稱與內(nèi)部類不相同):"靜態(tài)成員名"
創(chuàng)建靜態(tài)內(nèi)部類對象(不需要外部類對象):外部類.內(nèi)部類 對象名 = new 外部類.內(nèi)部類()
方法內(nèi)部類:訪問僅限與方法內(nèi)(或者該作用域內(nèi))
局部內(nèi)部類就像方法里的局部變量一樣,不能用public protected private static修飾的
只能訪問方法中定義的final類型的局部變量。原因:局部變量會隨著方法體執(zhí)行完而消亡。但內(nèi)部類對象還存在。(導(dǎo)致內(nèi)部類要訪問一個不存在的局部變量)(使用final不僅會保持對象的引用,還會讓編譯器持續(xù)維護這個對象在回調(diào)方法中的生命周期)(局部內(nèi)部類并不是直接調(diào)用方法傳進來的參數(shù),而是內(nèi)部類通過構(gòu)造器將參數(shù)備份一份)
匿名內(nèi)部類
匿名內(nèi)部類直接使用 new 來生成一個對象的引用
缺點:僅能被使用一次
使用匿名內(nèi)部類必須繼承一個類或者實現(xiàn)一個接口(兩者不可兼得)
匿名內(nèi)部類不能有構(gòu)造函數(shù),不能存在任何靜態(tài)成員變量和靜態(tài)方法
匿名內(nèi)部類不能是抽象的必須實現(xiàn)繼承的類或者實現(xiàn)的接口的所有抽象方法
匿名內(nèi)部列初始化:使用構(gòu)造代碼塊。使用構(gòu)造代碼塊能夠達到為匿名內(nèi)部類創(chuàng)建一個構(gòu)造器的效果。
上述就是小編為大家分享的Java中有哪些內(nèi)部類了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。