Java筆記--內(nèi)部類
一、內(nèi)部類
以后在實(shí)際開(kāi)發(fā)中很少自己去寫(xiě)。
概念:內(nèi)部類就是在類中繼續(xù)編寫(xiě)一個(gè)類。
1、成員內(nèi)部類

內(nèi)部類創(chuàng)建對(duì)象的格式:

內(nèi)部類中,訪問(wèn)外部類的成員:可以直接訪問(wèn)。
外部類中,訪問(wèn)內(nèi)部類的成員:需要?jiǎng)?chuàng)建對(duì)象。

2、靜態(tài)內(nèi)部類
內(nèi)部類也可以被static修飾,它也算是外部類的一個(gè)成員。

3、局部?jī)?nèi)部類
太雞肋了,不用。
4、匿名內(nèi)部類
是一個(gè)特殊的局部?jī)?nèi)部類(定義在方法內(nèi)部),前提:需要存在一個(gè)接口或者類。
下面我們將通過(guò)一個(gè)例子來(lái)感受匿名內(nèi)部類的作用:
我們先準(zhǔn)備一個(gè)接口Inter,在里面編寫(xiě)一個(gè)抽象方法show( );

然后在主方法平級(jí)的位置編寫(xiě)了一個(gè)use方法,方法的參數(shù)就是剛剛的Inter類型,然后在里面去調(diào)用show方法。

然后我們想調(diào)用這個(gè)useInter方法,如果我們直接調(diào)用會(huì)報(bào)錯(cuò),錯(cuò)誤的原因是沒(méi)有傳遞參數(shù)

方法的形參是一個(gè)接口類型Inter,我們應(yīng)該傳入什么參數(shù)?
接口不能實(shí)例化,所以不能new一個(gè)Inter類型的對(duì)象。
所以只能傳遞這個(gè)接口的實(shí)現(xiàn)類對(duì)象了。
當(dāng)方法的形參是一個(gè)實(shí)現(xiàn)類對(duì)象,我們只能傳入接口的實(shí)現(xiàn)類對(duì)象。
這里我們新建一個(gè)Inter的實(shí)現(xiàn)類,重寫(xiě)方法。

我們就可以創(chuàng)建實(shí)現(xiàn)類對(duì)象,傳入方法里面去。以多態(tài)的形式(父類引用指向子類對(duì)象)

如果使用匿名內(nèi)部類如何完成方法的調(diào)用?

下面就是用匿名內(nèi)部類完成方法的調(diào)用。

匿名內(nèi)部類并不能完全替代實(shí)現(xiàn)類,如果接口里面抽象方法多就手寫(xiě)實(shí)現(xiàn)類,如果少就用匿名內(nèi)部類。