1、什么是匿名內(nèi)部類 內(nèi)部類,存在于另一個(gè)類內(nèi)部的類,而匿名內(nèi)部類,顧名思義,就是沒有名字的內(nèi)部類。 2、為什么需要匿名內(nèi)部類?
每個(gè)inner class都能夠各自繼承某一實(shí)現(xiàn)類(implementation)。因此,inner class不受限于outer class是否已繼承自某一實(shí)現(xiàn)類。 如果少了inner class所提供的“繼承自多個(gè)具象(concrete)或抽象(abstract)類”的能力,設(shè)計(jì)上和編程上的某些問(wèn)題會(huì)變得十分棘手。 所以,從某個(gè)角度來(lái)看inner class,你可以說(shuō)它是多重繼承問(wèn)題的完整解決方案。interface能夠解決其中一部分問(wèn)題,但inner classes 才能有效而實(shí)際地允許“多重實(shí)現(xiàn)繼承(multiple implementation)”。也就是說(shuō),inner classes實(shí)際上允許你繼承多個(gè)non-interface。 從這個(gè)層面上使用內(nèi)部類時(shí)一般都是通過(guò)其父類或繼承的接口來(lái)進(jìn)行實(shí)例化和初始化的,如3中所示,這時(shí)內(nèi)部類的名字是多余的,所以 就使用了匿名內(nèi)部類 3、怎么實(shí)現(xiàn)匿名內(nèi)部類?
匿名內(nèi)部類的實(shí)現(xiàn)非常簡(jiǎn)單,如有一接口 Interface A{ public void method();
}
這時(shí)你可以寫一個(gè)如下的語(yǔ)句得到接口A的實(shí)現(xiàn)類的對(duì)象 A a=new A(){ public void method(){System.out.println("hehe");} }; 而其中的{ public void method(){System.out.println("hehe");} };就是定義了一個(gè)匿名內(nèi)部類 4、問(wèn)題答案
以上可以看出匿名內(nèi)部類在實(shí)現(xiàn)時(shí)必須借助一個(gè)類或一個(gè)接口,若從這個(gè)層次上講它是可以繼承其他類也可以實(shí)現(xiàn)接口的, 但若是通過(guò)extends或implements關(guān)鍵字那是不可能的
|