Java基礎之內部類與代理知識總結

一、內部類

內部類是指在另一個類中的類

  • 內部類可以對同一個包中的所有類隱藏(權限改為private)
  • 內部類方法可以訪問定義這個類的作用域中的數據,包括原本私有的數據

註意:內部類位於類的內部,並不意味著類的實例都必須要有內部類的實例

內部類是可以訪問定義這個類的屬性的,因為內部類的對象總有一個隱式引用,指向創建它的外部類對象

對於一般的類,隻有包可見性和公共可見性(一個是缺省,另一個是public,沒有protected和private,protected一般對於外部類權限是沒多大用處的)

但對於內部類,可以是所有類型,public、protected、default、private(因為是內部類,外面還套著一個類,所以protected是有意義的)

1.1 創建內部類

內部類的new比較特殊,是建立在以實例化的外部類去執行的(而且前提內部類不為private)

在這裡插入圖片描述

如果內部類為private的話,對於外部是根本找不到這個類的,不可以去調用,而且隻有外部類可以構造內部類的實例對象

1.2 內部類調用外部類的變量

也是使用this關鍵字,不過為瞭區分this(區分是外部類還是內部類),使用外部類的屬性時,需要用:外部類名.this來操作

在這裡插入圖片描述

二、局部內部類

如果一個類隻要使用一次,可以直接在一個方法中局部地去定義這個類,更好地節約瞭空間

註意:局部內部類聲明時是不可以有訪問說明符的(public或者private),局部類的作用域被限定在聲明這個局部類的方法塊中,局部類最大的優勢就是,對外部世界是完全隱藏的,甚至在本類也不可以訪問,也就是除瞭聲明局部類的方法塊中,沒有任何其他類或方法可以訪問局部類,知道其存在

在這裡插入圖片描述

2.1 外部方法訪問變量

局部類的一個優點就是局部類不僅可以訪問外部類的字段,還可以訪問方法裡面的局部變量

在這裡插入圖片描述

訪問的方法與內部類是一致的

三、匿名內部類

如果對於局部內部類使用時,甚至不需要去定義匿名內部類的名字,隻是想單獨去創建對象,那麼可以不用給其設置名字,稱為匿名內部類

比如說,想要一個臨時的接口實現類

在這裡插入圖片描述

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

在這裡插入圖片描述

四、lambda表達式結合局部內部類

前面說過lambda表達式適用於函數式接口,所以我們也可以使用lambda表達式來實現局部內部類

當然,lambda表達式生成的相當於是一個參數,所以要使用方法入參來調用

在這裡插入圖片描述

lambda表達式使用一個空括號代表無參,所以建議,即使隻有一個參數,也放在括號裡面

五、靜態內部類

或許有的時候,隻是想將內部類隱藏起來,並不需要內部類擁有外部類的一個引用指針(即this),那麼可以將內部類用static關鍵字去修飾,這樣內部類就不會有外部類的引用瞭(無法使用到外部類的方法和變量瞭),稱為靜態內部類

六、代理

代理(proxy)是一種比較高級的計技術

利用代理可以在運行時創建實現瞭一組給定接口的新類(在不知道要實現哪些接口時)

到此這篇關於Java基礎之內部類與代理知識總結的文章就介紹到這瞭,更多相關Java內部類與代理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: