這篇文章,我們來介紹一下java的內(nèi)部類知識(shí)
目錄
1.內(nèi)部類介紹
1.1內(nèi)部類的應(yīng)用場(chǎng)景
1.2 小結(jié)
2.成員內(nèi)部類
2.1 成員內(nèi)部類的書寫
2.2 創(chuàng)建成員內(nèi)部類的對(duì)象
2.3 成員內(nèi)部類獲取外部類的成員變量
3.靜態(tài)內(nèi)部類
4.局部內(nèi)部類
5.匿名內(nèi)部類
6.總結(jié)
1.內(nèi)部類介紹
首先,我們來介紹一下,什么是內(nèi)部類。
類的五大成員:屬性,方法,構(gòu)造方法,代碼塊,內(nèi)部類
內(nèi)部類:就是在一個(gè)類的里面再定義一個(gè)其他的類,這個(gè)再定義的其他類,我們就稱為內(nèi)部類。
代碼演示如下圖:
解釋:我們有一個(gè)類Outer,然后在Outer內(nèi)部有一個(gè)類Inner,那么這個(gè)Inner類就是一個(gè)內(nèi)部類。
內(nèi)部類的分類:
- 成員內(nèi)部類
- 靜態(tài)內(nèi)部類
- 局部內(nèi)部類
- 匿名內(nèi)部類
1.1內(nèi)部類的應(yīng)用場(chǎng)景
內(nèi)部類也是有應(yīng)用場(chǎng)景的。下面,我們通過具體的例子來看一下內(nèi)部類的應(yīng)用場(chǎng)景
例:
需求:寫一個(gè)Javabean類來描述汽車
屬性:汽車的品牌,車齡,顏色,發(fā)動(dòng)機(jī)的品牌,使用年限
思考:我們可以創(chuàng)建一個(gè)汽車類,里面寫那些所有的屬性,但是有點(diǎn)不合適,因?yàn)榘l(fā)動(dòng)機(jī)是一個(gè)獨(dú)立的個(gè)體,它和車有關(guān)系,但不屬于車。那如果我們創(chuàng)建一個(gè)單獨(dú)的類,用這個(gè)類來寫發(fā)動(dòng)機(jī),也不合適,因?yàn)榘l(fā)動(dòng)機(jī)和車是有關(guān)系的,單獨(dú)的把發(fā)動(dòng)機(jī)拿出來,也沒什么意義。這時(shí),我們就可以使用內(nèi)部類。
所以類的創(chuàng)建如下:?
注意:
- 內(nèi)部類表示的事物是外部類的一部分
- 內(nèi)部類單獨(dú)出現(xiàn)沒有任何意義
內(nèi)部類的訪問特點(diǎn):
- 內(nèi)部類可以直接訪問外部類的成員,包括私有
- 外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對(duì)象
1.2 小結(jié)
什么是內(nèi)部類?寫在一個(gè)類里面的類是內(nèi)部類
什么時(shí)候用到內(nèi)部類?B類表示的事物是A類的一部分,且B單獨(dú)存在沒有意義
2.成員內(nèi)部類
下面,我們來介紹一下成員內(nèi)部類
成員內(nèi)部類:寫在成員位置的,屬于外部類的成員
2.1 成員內(nèi)部類的書寫
成員內(nèi)部類和類的成員屬性是同一級(jí)別的,都是寫在成員位置的。
成員內(nèi)部類可以被一些修飾符所修飾,比如private,默認(rèn),protected,public,static等,并且這些規(guī)則和之前是一樣的。說白了,你可以把成員內(nèi)部類當(dāng)成一個(gè)成員變量看待
被private修飾:在外界不能直接創(chuàng)建成員內(nèi)部類的對(duì)象,只能外部類里面創(chuàng)建它
被默認(rèn)修飾:在本包當(dāng)中用
被protected修飾:在本包中的其他類中使用,或者是其他包的子類中使用
被public修飾:在所有地方都可以使用
被static修飾:此時(shí)稱為靜態(tài)內(nèi)部類,后面會(huì)講
注意:在成員內(nèi)部類的里面,在JDK16之前不能定義靜態(tài)變量,JDK16開始才可以定義靜態(tài)變量
2.2 創(chuàng)建成員內(nèi)部類的對(duì)象
有兩種方式
方式一:在外部類中編寫方法,對(duì)外提供內(nèi)部類的對(duì)象
演示如下:
?
方式二:直接創(chuàng)建格式:外部類名.內(nèi)部類名 對(duì)象名 = 外部類對(duì)象.內(nèi)部類對(duì)象
演示如下:
?
2.3 成員內(nèi)部類獲取外部類的成員變量
下面,我們通過一個(gè)案例來說明內(nèi)部類獲取外部類的成員變量
結(jié)果如下圖所示:
解析:其實(shí)還是基礎(chǔ)要過關(guān)。方法內(nèi)部有a,你要打印它,就是直接調(diào)用它,因?yàn)檫@個(gè)a的作用范圍就是這個(gè)方法,然后是內(nèi)部類,內(nèi)部類的a的作用范圍是內(nèi)部類,用this關(guān)鍵字,this關(guān)鍵字你就可以把它理解為執(zhí)行本類的一個(gè)對(duì)象。然后是外部類的a,那就調(diào)用外部類的對(duì)象,就要外部類點(diǎn)出this來使用。就這,就是基礎(chǔ)的內(nèi)容,基礎(chǔ)要過關(guān)。
3.靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類是成員內(nèi)部類的一種,是被static修飾的成員內(nèi)部類。
靜態(tài)內(nèi)部類只能訪問外部類中的靜態(tài)變量和靜態(tài)方法,如果想要訪問非靜態(tài)的需要?jiǎng)?chuàng)建外部類的對(duì)象。
解析:在講靜態(tài)的時(shí)候說過,靜態(tài)只能訪問靜態(tài),如果想訪問非靜態(tài),那就創(chuàng)建對(duì)象來調(diào)用。
創(chuàng)建靜態(tài)內(nèi)部類對(duì)象的格式:
外部類名.內(nèi)部類名 對(duì)象名 = new 外部類名.內(nèi)部類名();
注意:因?yàn)槭庆o態(tài)的,所以可以通過類去調(diào)用,而不用通過對(duì)象去調(diào)用
調(diào)用非靜態(tài)方法的格式:先創(chuàng)建對(duì)象,用對(duì)象調(diào)用
調(diào)用靜態(tài)方法的格式:外部類名.內(nèi)部類名.方法名();
代碼演示:
結(jié)果:
?
4.局部內(nèi)部類
下面介紹一下局部內(nèi)部類:
- 將內(nèi)部類定義在方法里面就叫做局部內(nèi)部類,類似于方法里面的局部變量
- 外界是無法直接使用的,需要在方法內(nèi)部創(chuàng)建對(duì)象并使用
- 該類可以直接訪問外部類的成員,也可以訪問方法內(nèi)的局部變量
代碼演示:
有點(diǎn)繞,但是不難,可以多理解理解
5.匿名內(nèi)部類
匿名內(nèi)部類本質(zhì)是就是隱藏了名字(或者說沒有名字)的內(nèi)部類。
它的格式如下
????????new 類名或接口名(){
? ? ? ????????? 重寫方法;
????????}
它里面包括了三部分內(nèi)容:繼承/實(shí)現(xiàn),方法重寫,創(chuàng)建對(duì)象
具體演示:
結(jié)果:
?
匿名內(nèi)部類的使用場(chǎng)景:
當(dāng)方法的參數(shù)是接口或者類時(shí),以接口為例,可以傳遞這個(gè)接口的實(shí)現(xiàn)類對(duì)象,如果實(shí)現(xiàn)類只要使用一次,就可以用匿名內(nèi)部類。文章來源:http://www.zghlxwxcb.cn/news/detail-404042.html
6.總結(jié)
這篇文章主要講了一下各種內(nèi)部的使用情況。說白了,還是要有封裝思想,當(dāng)內(nèi)部類出現(xiàn)在不同位置時(shí),不要把它當(dāng)做類,就把它當(dāng)做與它同級(jí)的一個(gè)事務(wù)來看,這樣就簡單很多了。除此之外,我們還要十分熟悉前面的基礎(chǔ)知識(shí),只有這樣,我們學(xué)習(xí)新知識(shí),解決問題時(shí),才能更加的游刃有余。文章來源地址http://www.zghlxwxcb.cn/news/detail-404042.html
到了這里,關(guān)于java基礎(chǔ)知識(shí)——21.內(nèi)部類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!