前言
在上文中,講到了靜態內部類,本文主要談一下成員內部類、局部內部類和匿名內部類。
成員內部類
和靜態內部類非常相似,都是定義在一個類中的成員位置,與靜態內部類唯一的區別是,成員內部類沒有static修飾。或者也可以這麼理解:我們知道一個類有成員變量、有成員方法,那麼這些成員定義在類中的哪個位置,那麼成員內部類也就定義在哪個位置。
特點
雖然是定義在類的內部,但是內部類和外部類並不是繼承關係。 成員內部類定義在外部類的成員位置上。 會生成兩個.class文件,一個是Outer.class,一個是Inner.class。 生成成員內部類的實例對象的語法:Outer.Inner inner = new Outer().new Inner()。
案例a
小總結
初次查看成員內部類的創建實例對象的方式總是感覺有那麼點特殊,但是仔細想想,才體會到了Java真的是非常嚴謹而且是很優美的。事實上,既然是叫做成員,那麼這個成員內部類實際上是和成員變量、成員方法是屬於同一級的,是不屬於外部類這個類的,而是屬於外部類的實例對象,但是呢,這個成員內部類又有點特殊,畢竟是一個類,那麼既然是類,就可以創建對象,那麼問題來了:如果想要創建內部類的對象,那麼必然必須是要存在外部類的對象的,所以我們去創建成員內部類的對象的時候,首先應該是new Outer()創建好外部類之後,再去創建內部類的實例對象。
案例b
小總結
成員內部類可以訪問外部類的靜態和非靜態的方法和成員變量。 生成成員內部類的實例對象的方式:Outer.Inner inner = new Outer().new Inner()。 如果想要在成員內部類中訪問外部類的成員變量,語法是:Outer.this.成員變量。
每日一題:
不同級別的用戶對同一對象擁有不同的訪問權利或者是某個客戶端不能直接操作到某個某個對象,但是又必須和那個對象有所互動,那麼這種情況最好使用()設計模式。
A、Bridge模式
B、Facade模式
C、Adapter模式
D、Proxy模式
溫馨提示:
歡迎各位小夥伴留言寫出您心中的答案哦!
互相交流,互相學習。