Java基礎之內(nèi)部類與代理知識總結
一、內(nèi)部類
內(nèi)部類是指在另一個類中的類
- 內(nèi)部類可以對同一個包中的所有類隱藏(權限改為private)
- 內(nèi)部類方法可以訪問定義這個類的作用域中的數(shù)據(jù),包括原本私有的數(shù)據(jù)
注意:內(nèi)部類位于類的內(nèi)部,并不意味著類的實例都必須要有內(nèi)部類的實例
內(nèi)部類是可以訪問定義這個類的屬性的,因為內(nèi)部類的對象總有一個隱式引用,指向創(chuàng)建它的外部類對象
對于一般的類,只有包可見性和公共可見性(一個是缺省,另一個是public,沒有protected和private,protected一般對于外部類權限是沒多大用處的)
但對于內(nèi)部類,可以是所有類型,public、protected、default、private(因為是內(nèi)部類,外面還套著一個類,所以protected是有意義的)
1.1 創(chuàng)建內(nèi)部類
內(nèi)部類的new比較特殊,是建立在以實例化的外部類去執(zhí)行的(而且前提內(nèi)部類不為private)

如果內(nèi)部類為private的話,對于外部是根本找不到這個類的,不可以去調(diào)用,而且只有外部類可以構造內(nèi)部類的實例對象
1.2 內(nèi)部類調(diào)用外部類的變量
也是使用this關鍵字,不過為了區(qū)分this(區(qū)分是外部類還是內(nèi)部類),使用外部類的屬性時,需要用:外部類名.this來操作

二、局部內(nèi)部類
如果一個類只要使用一次,可以直接在一個方法中局部地去定義這個類,更好地節(jié)約了空間
注意:局部內(nèi)部類聲明時是不可以有訪問說明符的(public或者private),局部類的作用域被限定在聲明這個局部類的方法塊中,局部類最大的優(yōu)勢就是,對外部世界是完全隱藏的,甚至在本類也不可以訪問,也就是除了聲明局部類的方法塊中,沒有任何其他類或方法可以訪問局部類,知道其存在

2.1 外部方法訪問變量
局部類的一個優(yōu)點就是局部類不僅可以訪問外部類的字段,還可以訪問方法里面的局部變量

訪問的方法與內(nèi)部類是一致的
三、匿名內(nèi)部類
如果對于局部內(nèi)部類使用時,甚至不需要去定義匿名內(nèi)部類的名字,只是想單獨去創(chuàng)建對象,那么可以不用給其設置名字,稱為匿名內(nèi)部類
比如說,想要一個臨時的接口實現(xiàn)類

當然不一定是一個接口,也可以是一個類,如果是接口就要去實現(xiàn)里面的抽象方法,如果是類的話,就可以自定義去進行拓展

四、lambda表達式結合局部內(nèi)部類
前面說過lambda表達式適用于函數(shù)式接口,所以我們也可以使用lambda表達式來實現(xiàn)局部內(nèi)部類
當然,lambda表達式生成的相當于是一個參數(shù),所以要使用方法入?yún)碚{(diào)用

lambda表達式使用一個空括號代表無參,所以建議,即使只有一個參數(shù),也放在括號里面
五、靜態(tài)內(nèi)部類
或許有的時候,只是想將內(nèi)部類隱藏起來,并不需要內(nèi)部類擁有外部類的一個引用指針(即this),那么可以將內(nèi)部類用static關鍵字去修飾,這樣內(nèi)部類就不會有外部類的引用了(無法使用到外部類的方法和變量了),稱為靜態(tài)內(nèi)部類
六、代理
代理(proxy)是一種比較高級的計技術
利用代理可以在運行時創(chuàng)建實現(xiàn)了一組給定接口的新類(在不知道要實現(xiàn)哪些接口時)
到此這篇關于Java基礎之內(nèi)部類與代理知識總結的文章就介紹到這了,更多相關Java內(nèi)部類與代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換
這篇文章主要介紹了關于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Java中Collection與Collections的區(qū)別詳解
這篇文章主要為大家詳細介紹了Java中Collection與Collections的區(qū)別,文中有詳細的代碼示例,具有一定的參考價值,感興趣的同學可以參考一下2023-06-06

