匿名內部類:
先舉個例子吧,給大家看一下什么是匿名內部類,Endeavor剛剛接觸的時候,覺得哇哦,好奇怪的樣子,這也太別扭了吧,不知道大家是什么感覺。
為了進行對比,先舉一個正常的類方法調用的例子(大家應該都看的懂吧):
輸出結果為:
接下來便開始說正題吧,匿名內部類,通過名字,想必大家就知道什么是匿名內部類了吧,
1、定義:就是沒有名字的內部類(內部類之前介紹過了哦)。
2、使用內部類有什么好處呢,一句話就概括了:簡化書寫,至於是怎么簡化的,哪里簡化了等下再說。
3、先說一下什么時候使用匿名內部類,即使用前提和條件:必須存在繼承和實現關系的時候才可以使用,其實這也很好理解,首先,匿名內部類沒有名字,那該如何描述以及new個對象呢?對,沒錯,要通過繼承它的父類或者實現一個接口來達成這一目的。
下面舉個例子:
輸出結果:
看到這幾行代碼,應該就不用我來解釋為什么說匿名內部類可以簡化書寫了吧。
如何調用匿名內部類中的方法這個應該也是大家好奇的吧,畢竟匿名內部類沒有類名該如何調用方法就成為了一個問題。
1、匿名內部類中只有一個方法的情況
2、匿名內部類有一個方法調用起來很容易,那如果有多個方法呢,大家不會想這樣吧?
輸出結果試一下:
那么該如何調用匿名內部類中的多方法呢?
有兩種方法,如果大家還有更好的方法多多賜教哦!
1、利用多態的思想(匿名內部類的前提是存在繼承或實現關系的)
輸出結果:
2、改變方法類型,返回this
輸出結果:
不知道看完之后大家有沒有什么疑問,如果想調用匿名內部類自己特有的方法的時候呢?該如何調用呢?
輸出結果:
顯然是不行的,所以Endeavor覺得內名內部類可以有自己特有的方法,但是前提條件是這個匿名內部類只有這一個方法。如果有多個方法的時候,他只能繼承父類的方法以及重寫這個方法或實現接口,絕不可能在在多個方法的情況下,調用自身特有的方法,但是這個特有的方法可以存在,但無法調用,不知道大家認同與否。
舉例:
輸出結果:
補充三點:
1、匿名內部類 :匿名內部類只是沒有類名,其他的一概成員都是具備的。
2、之前說過匿名內部類存在的前提是要有繼承或者實現關系的,但是並沒有看到extends和implements關鍵字,這是怎么回事呢?
答:很簡單,匿名內部類沒有連類名都沒有,使用關鍵字就更無從說起了。這些由jvm搞定了。
2、匿名內部類是實現接口
3、接下來和大家分享一下匿名內部類中使用最普遍的一種情況,即以實參的形式使用
輸出結果:
————————————————
轉載於CSDN博主「Cool_Tomato」的原創文章