亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

淺析Java內部類——成員內部類

瀏覽:4日期:2022-08-26 13:55:17

內部類是什么,簡單來說,就是定義在類內部的類(一本正經的說著廢話)。

一個正經的內部類是長這樣的:

public class Outer { class Inner{ }}

這是為了演示而寫的類,沒有什么luan用,可以看到Inner類置于Outer類的內部。

那為什么要大費周章的在類內部定義一個類呢?不能在類外部定義類嗎?內部類跟外部類有什么關系?

確實,很多時候,在外部單獨定義一個類確實更加方便,也更加通用,但內部類的存在自然有其存在的道理,內部類作為寄生在外部類的類,可以自由訪問內部類的所有的屬性和方法,有沒有聯想其我們之前說的繼承,子類可以繼承父類的屬性和方法,但是內部類有著更高的訪問權限,不僅是public屬性,protected屬性,就連private屬性也可以輕松訪問,這樣就不會讓修飾符限制你的想象了(手動滑稽)。

內部類也分很多種:成員內部類、靜態內部類、局部內部類、匿名內部類。今天先來說說第一種:成員內部類。

成員內部類是最簡單粗暴的內部類,上面那個栗子中的Inner類就是成員內部類,相比普通的類,成員內部類是不能有static修飾的成員或者方法的,因為成員內部類是寄生在外部類中的,所以必須先有外部類實例才能有成員內部類。在外部創建內部類對象時,姿勢也不太一樣,看起來像是這個樣子的:

public class Test { public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner(); }}

在內部類中可以訪問外部類的方法和屬性,外部類也可以訪問內部類的方法和屬性,舉個栗子:

public class Outer { private int num; private Inner inner; Outer(){ num = 1; inner = new Inner(); } public void print(){ System.out.println('Outer.print()'); System.out.println(inner.num); System.out.println(num); } class Inner{ private int num; Inner(){ num = 2; } public void print(){ System.out.println('Inner.print()'); System.out.println(this.num); System.out.println(Outer.this.num); } }}

public class Test { public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); outer.print(); inner.print(); }}

輸出如下:

Outer.print()31Inner.print()31

外部類訪問內部類的姿勢是先生成內部類實例,然后就能訪問所有方法和屬性,內部類訪問外部類方法和屬性則直接使用Outer.屬性/方法名 即可。

在這個栗子中,我們可以看到內部了Inner可以對外圍類Outer的屬性進行無限制的訪問,盡管它是private修飾的。因為當我們在創建某個外圍類的內部類對象時,會往內部類傳入一個外部類的引用,只要我們在訪問外部類的成員時,就會用這個引用來選擇外圍類的成員。引用內部類的時候,需要使用Outer.Inner這樣的形式來聲明,而不能直接使用Inner來聲明(除了在Outer類中),當需要使用到內部類的時候,還是推薦使用getInnerInstance的方式來獲取,特別是當內部類只有無參構造器的時候:

public class Outer { private int num; private Inner inner; Outer(){ num = 1; inner = new Inner(); } public Inner getInnerInstance() { return new Inner(); } public void print(){ System.out.println('Outer.print()'); System.out.println(inner.num); System.out.println(num); } public class Inner{ private int num; Inner(){ num = 2; } public void print(){ System.out.println('Inner.print()'); System.out.println(this.num); System.out.println(Outer.this.num); } }}

public class Test { public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.getInnerInstance(); outer.print(); inner.print(); }}

這樣的話,就能更好的封裝了。

當然,內部類跟外部類還有一個很重要區別:內部類可以用private修飾,而外部類是不能使用private修飾的。如果內部類僅僅在類內部使用時,使用private修飾后,就可以更好的隱藏內部信息。

至此,內部類的第一部分講解完畢,歡迎大家繼續關注。

以上就是淺析Java內部類——成員內部類的詳細內容,更多關于Java 成員內部類的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 色亚洲视频| 在线国产你懂的 | 成人自拍视频在线 | 婷婷色爱区综合五月激情韩国 | 色一情一区二区三区四区 | 日韩不卡视频在线观看 | 亚洲欧美日韩精品一区 | 亚洲精品欧美一区二区三区 | 国产淫片 | 亚洲国产精品久久卡一 | 成人免费一级片 | 91精品免费不卡在线观看 | 亚洲国产精品高清在线一区 | 免费黄色三级 | 97超巨香蕉在线亚洲精选 | 久久97精品久久久久久清纯 | 日韩 亚洲 欧美 中文 高清 | 国产在线五月综合婷婷 | 一级毛片特黄久久免费看 | 国产精品a v 免费视频 | 一本色道久久88亚洲综合 | 国产成人自拍视频在线观看 | 国内精品久久久久影院不卡 | 亚洲人成黄网在线观看 | 调教~奴●メイドの馆 | 亚洲精品在线播放视频 | 久久青青草原精品国产麻豆 | 久久国产欧美日韩精品免费 | 日本免费一区二区在线观看 | 免费一级a毛片在线搐放正片 | 日韩一级欧美一级一级国产 | 日本欧美一区二区三区免费不卡 | 亚欧美图片自偷自拍另类 | 在线久综合色手机在线播放 | 午夜草草| 黄色一级毛片免费 | 成人精品一区二区三区中文字幕 | 亚洲高清一区二区三区 | 日韩精品一 | 精品国产一二三区 | 精品一区二区三区高清免费观看 |