av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

淺析Java內(nèi)部類——成員內(nèi)部類

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

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

一個(gè)正經(jīng)的內(nèi)部類是長這樣的:

public class Outer { class Inner{ }}

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

那為什么要大費(fèi)周章的在類內(nèi)部定義一個(gè)類呢?不能在類外部定義類嗎?內(nèi)部類跟外部類有什么關(guān)系?

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

內(nèi)部類也分很多種:成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類。今天先來說說第一種:成員內(nèi)部類。

成員內(nèi)部類是最簡單粗暴的內(nèi)部類,上面那個(gè)栗子中的Inner類就是成員內(nèi)部類,相比普通的類,成員內(nèi)部類是不能有static修飾的成員或者方法的,因?yàn)槌蓡T內(nèi)部類是寄生在外部類中的,所以必須先有外部類實(shí)例才能有成員內(nèi)部類。在外部創(chuàng)建內(nèi)部類對象時(shí),姿勢也不太一樣,看起來像是這個(gè)樣子的:

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

在內(nèi)部類中可以訪問外部類的方法和屬性,外部類也可以訪問內(nèi)部類的方法和屬性,舉個(gè)栗子:

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

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

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

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(); }}

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

當(dāng)然,內(nèi)部類跟外部類還有一個(gè)很重要區(qū)別:內(nèi)部類可以用private修飾,而外部類是不能使用private修飾的。如果內(nèi)部類僅僅在類內(nèi)部使用時(shí),使用private修飾后,就可以更好的隱藏內(nèi)部信息。

至此,內(nèi)部類的第一部分講解完畢,歡迎大家繼續(xù)關(guān)注。

以上就是淺析Java內(nèi)部類——成員內(nèi)部類的詳細(xì)內(nèi)容,更多關(guān)于Java 成員內(nèi)部類的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 青青草免费在线观看 | 日本精品视频在线观看 | 亚洲精品不卡 | 久久精品视频网站 | 亚洲一区二区久久 | 丰满少妇高潮在线观看 | 久久新视频 | 久久99精品久久久久久琪琪 | 亚洲免费视频网站 | av不卡在线播放 | 日韩在线一区二区三区 | 日韩久久精品 | 久久久激情 | 国产午夜精品久久久久久久 | 国产精品一区二区三区免费 | 免费中文字幕日韩欧美 | 青娱乐福利视频 | 欧美黑人猛交 | 可以看的毛片 | 久久久网站 | 国产亚洲视频在线观看 | 人体free性hd | 成人欧美视频 | 日本黄色免费 | 在线观看日韩 | 夜夜躁狠狠躁日日躁av | 手机在线看片1024 | 亚洲国产精品成人无久久精品 | 日韩一区二区在线视频 | 国产午夜在线观看 | 午夜在线观看视频网站 | 亚洲欧美一区二区三区在线 | 国产手机在线视频 | 伊人久久影院 | 国产精品嫩草影院桃色 | a级黄色片 | 午夜在线免费视频 | www久久久久| 日韩视频在线观看免费 | 日日操夜夜爽 | 国产一级片在线播放 |