詳解Java匿名內部類

匿名內部類:

先舉個例子吧,給大傢看一下什麼是匿名內部類,Endeavor剛剛接觸的時候,覺得哇哦,好奇怪的樣子,這也太別扭瞭吧,不知道大傢是什麼感覺。

為瞭進行對比,先舉一個正常的類方法調用的例子(大傢應該都看的懂吧):

輸出結果為:

接下來便開始說正題吧,匿名內部類,通過名字,想必大傢就知道什麼是匿名內部類瞭吧,

  • 1、定義:就是沒有名字的內部類(內部類之前介紹過瞭哦)。
  • 2、使用內部類有什麼好處呢,一句話就概括瞭:簡化書寫,至於是怎麼簡化的,哪裡簡化瞭等下再說。
  • 3、先說一下什麼時候使用匿名內部類,即使用前提和條件:必須存在繼承和實現關系的時候才可以使用,其實這也很好理解,首先,匿名內部類沒有名字,那該如何描述以及new個對象呢?對,沒錯,要通過繼承它的父類或者實現一個接口來達成這一目的。

下面舉個例子:

輸出結果:

看到這幾行代碼,應該就不用我來解釋為什麼說匿名內部類可以簡化書寫瞭吧。

如何調用匿名內部類中的方法這個應該也是大傢好奇的吧,畢竟匿名內部類沒有類名該如何調用方法就成為瞭一個問題。

1、匿名內部類中隻有一個方法的情況

2、匿名內部類有一個方法調用起來很容易,那如果有多個方法呢,大傢不會想這樣吧?

輸出結果試一下:

那麼該如何調用匿名內部類中的多方法呢?

Endeavor有兩種方法,如果大傢還有更好的方法多多賜教哦!

1、利用多態的思想(匿名內部類的前提是存在繼承或實現關系的)

輸出結果:

2、改變方法類型,返回this

輸出結果:

不知道看完之後大傢有沒有什麼疑問,如果想調用匿名內部類自己特有的方法的時候呢?該如何調用呢?

輸出結果:

顯然是不行的,所以Endeavor覺得內名內部類可以有自己特有的方法,但是前提條件是這個匿名內部類隻有這一個方法。如果有多個方法的時候,他隻能繼承父類的方法以及重寫這個方法或實現接口,絕不可能在在多個方法的情況下,調用自身特有的方法,但是這個特有的方法可以存在,但無法調用,不知道大傢認同與否。

舉例:

輸出結果:

補充三點:

  • 1、匿名內部類 :匿名內部類隻是沒有類名,其他的一概成員都是具備的。

之前說過匿名內部類存在的前提是要有繼承或者實現關系的,但是並沒有看到extends和implements關鍵字,這是怎麼回事呢?

答:很簡單,匿名內部類沒有連類名都沒有,使用關鍵字就更無從說起瞭。這些由jvm搞定瞭。

  • 2、匿名內部類是實現接口

  • 3、接下來和大傢分享一下匿名內部類中使用最普遍的一種情況,即以實參的形式使用

輸出結果:

到此這篇關於詳解Java匿名內部類的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: