Java中匿名類的兩種實(shí)現(xiàn)方式
使用匿名內(nèi)部類課使代碼更加簡潔、緊湊,模塊化程度更高。內(nèi)部類能夠訪問外部內(nèi)的一切成員變量和方法,包括私有的,而實(shí)現(xiàn)接口或繼承類做不到。然而這個不是我說的重點(diǎn),我說的很簡單,就是匿名內(nèi)部類的兩種實(shí)現(xiàn)方式:第一種,繼承一個類,重寫其方法;第二種,實(shí)現(xiàn)一個接口(可以是多個),實(shí)現(xiàn)其方法。下面通過代碼來說明:
public class TestAnonymousInterClass{ public static void main(String args[]){ TestAnonymousInterClass test=new TestAnonymousInterClass(); test.show(); } //在這個方法中構(gòu)造了一個匿名內(nèi)部類 private void show(){ Out anonyInter=new Out(){// 獲取匿名內(nèi)部類實(shí)例 void show(){//重寫父類的方法 System.out.println("this is Anonymous InterClass showing."); } }; anonyInter.show();// 調(diào)用其方法 } } // 這是一個已經(jīng)存在的類,匿名內(nèi)部類通過重寫其方法,將會獲得另外的實(shí)現(xiàn) class Out{ void show(){ System.out.println("this is Out showing."); } }
程序運(yùn)行的輸出結(jié)果為:
this is Anonymous InterClass showing.
所以在這里看出,匿名內(nèi)部類有了自己的實(shí)現(xiàn)。其實(shí)很簡單,使用匿名內(nèi)部類是因?yàn)槲疫@地方需要有點(diǎn)什么特殊的實(shí)現(xiàn),所以我就在這地方把具體實(shí)現(xiàn)也給了出來了。然后我就在這地方獲取它的實(shí)例,調(diào)用它的方法。
接口的方式,只要把父類換成接口就行了,沒必要給出代碼了。
使用匿名內(nèi)部類時我們不要忘了我們的目的,我們只是在這地方想對某個類有特殊的實(shí)現(xiàn)。而不要想得太多,在匿名內(nèi)部編寫其它的方法。在匿名內(nèi)部類中編寫的自己的方法是不可見的。此種做法是毫無意義的,當(dāng)然一般也不會這么做。在這里只是告訴初學(xué)者對于匿名內(nèi)部類不要想的太多,而要這么想:匿名內(nèi)部類就是重寫父類或接口的方法。
匿名內(nèi)部類是沒有名字的,所以我們沒辦法獲得其類型,而只能把它當(dāng)作超類或接口類型來使用。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
基于list stream: reduce的使用實(shí)例
這篇文章主要介紹了list stream: reduce的使用實(shí)例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09springboot異步處理@NotBlank或@NotNull注釋校驗(yàn)不生效問題
這篇文章主要介紹了springboot異步處理@NotBlank或@NotNull注釋校驗(yàn)不生效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01spring注解識別一個接口的多個實(shí)現(xiàn)類方法
下面小編就為大家?guī)硪黄猻pring注解識別一個接口的多個實(shí)現(xiàn)類方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04利用Spring IOC技術(shù)實(shí)現(xiàn)用戶登錄驗(yàn)證機(jī)制
這篇文章主要為大家詳細(xì)介紹了Spring IOC技術(shù)實(shí)現(xiàn)用戶登錄驗(yàn)證機(jī)制的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10feign實(shí)現(xiàn)傳遞參數(shù)的三種方式小結(jié)
這篇文章主要介紹了feign實(shí)現(xiàn)傳遞參數(shù)的三種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06