寫在前面的話:
我一直相信對(duì)于知識(shí):如果你看不懂淑玫,不怪你巾腕,請(qǐng)相信絮蒿,一定是作者沒有把問題說(shuō)清楚尊搬。
看了本文章你將知道什么是匿名內(nèi)部類,如何熟練掌握并使用匿名內(nèi)部類佛寿。如果你已經(jīng)是大牛可以跳過(guò)但壮,沒有看的必要。
什么是匿名內(nèi)部類What
先說(shuō)類蜡饵,我們都知道類用于描述客觀世界里某一類對(duì)象的共同特征弹渔,對(duì)象是其具體體現(xiàn)溯祸。類可以被被認(rèn)為是一種自定義的數(shù)據(jù)類型肢专,可以使用類來(lái)定義變量。也就是所說(shuō)的類類型博杖,是一種引用數(shù)據(jù)類型椿胯。
如果在一個(gè)類里面定義一個(gè)類剃根,那么這個(gè)類就是內(nèi)部類哩盲,外面的那個(gè)類就是外部類,這個(gè)很好理解种冬。內(nèi)部類就相當(dāng)于外部類的一個(gè)成員,你可以把內(nèi)部類看成一個(gè)整體舔糖。內(nèi)部類分為:靜態(tài)內(nèi)部類莺匠,非靜態(tài)內(nèi)部類金吗。匿名內(nèi)部類是非靜態(tài)內(nèi)部類的一種特殊情況趣竣,匿名內(nèi)部類沒有類名摇庙,因此就不可能有構(gòu)造函數(shù),不能創(chuàng)建對(duì)象卫袒。除此之外還有局部?jī)?nèi)部類,就是定義在方法內(nèi)的单匣,這個(gè)一般不怎么用,不需要掌握户秤,知道就好码秉,本文主要說(shuō)匿名內(nèi)部類鸡号,其他內(nèi)部類以后會(huì)說(shuō)转砖。
為什么會(huì)有匿名內(nèi)部類
說(shuō)白了,就是因?yàn)橄胪祽懈幔幌雽懱啻a。如果可以汞窗,程序員完全可以通過(guò)實(shí)現(xiàn)接口或者繼承抽象類的方式來(lái)實(shí)現(xiàn)而不用創(chuàng)建匿名內(nèi)部類。但是使用匿名內(nèi)部類的優(yōu)點(diǎn)是顯而易見的杉辙,可以少些代碼模捂,而且代碼更加簡(jiǎn)潔。
匿名內(nèi)部類的定義
先看匿名內(nèi)部類的定義的語(yǔ)法格式:
new 實(shí)現(xiàn)接口()
{
//匿名內(nèi)部類類體部分
}
new 父類構(gòu)造器(實(shí)參列表)
{
//匿名內(nèi)部類類體部分
}
為什么匿名內(nèi)部類的定義有這兩種方式呢狂男?這是因此這兩種方式的定義分別對(duì)應(yīng)兩種方式综看,一種是接口岖食,另一種是抽象類红碑。
對(duì)于實(shí)現(xiàn)接口泡垃,由于接口是沒有構(gòu)造函數(shù)的析珊,注意這里一定是空參數(shù)。
第二種是調(diào)用父類的構(gòu)造器忠寻,注意此處可以是空參數(shù),也可以傳入?yún)?shù)存和。
如何使用匿名內(nèi)部類
對(duì)于匿名內(nèi)部類的使用,我將通過(guò)兩個(gè)具體的例子進(jìn)行說(shuō)明捐腿,如果你看懂了這兩個(gè)例子纵朋,就基本掌握了他的使用茄袖,建議多看幾遍例子操软。
第一種情況:實(shí)現(xiàn)接口
interfance Product
{
public double getPrice();
public String getName();
}
上面代碼定義一個(gè)接口宪祥,接口里面兩個(gè)抽象方法
public class Anonymous
{
public void test (Product p)
{
System.out.println(p.getName()+"--------"+p.getPrice());
}
public static void main(String [ ] args )
{
Anonymous as= new Anonymous ();
as.test(new Product( )//此處實(shí)現(xiàn)接口并實(shí)現(xiàn)抽象方法
{
public double getPrice( )//實(shí)現(xiàn)方法
{
return 8888;
}
public String getName( )//實(shí)現(xiàn)方法
{
return "I can do it ";
}
});
}
}
上面代碼很簡(jiǎn)單聂薪,就是定義了一個(gè)類Anonymous,在類里定義了一個(gè)test方法胆建。然后就是創(chuàng)建Anonymous對(duì)象,調(diào)用他的實(shí)例方法test()肘交。
不過(guò)調(diào)用test()方法時(shí),要傳入一個(gè)Product對(duì)象涯呻。但是由于Product是一個(gè)接口凉驻,無(wú)法創(chuàng)建對(duì)象复罐,所以要實(shí)現(xiàn)該接口涝登。因此此處采用匿名內(nèi)部類的方式進(jìn)行效诅,并實(shí)現(xiàn)接口中全部的抽象方法胀滚!