從今天起開始每日一篇技術博客,固然這只是我當天所學的一些隨筆,裏面或多或少會有理解不當的地方,但願你們多多指教,一塊兒進步!java
在講匿名內部類以前,先講講內部類的一些概念。code
1.內部類:顧名思義,內部類就是寫在一個類裏面的類(廢話),這裏你們可能會問了,爲何咱們不直接寫一個class呢,非要寫在內部。緣由很簡單,內部類一方面是有很好的封裝性,要經過外部類對象才能訪問(具體實例見下方代碼)。另外一方便定義起來很方便。最後,內部類還能夠騷氣地實現多重繼承,由於外部類是否繼承或實現一個抽象類或接口對內部類毫無影響,內部類依然能夠去繼承,這樣是一種變相的多繼承。接下來咱們看一下內部類的一個實例對象
/** @author lw */ public class InnerClassTest { class InnerClass { //public InnerClass(){} public void B() { System.out.println("這是內部類方法"); } } public static void main(String args[]) { InnerClassTest i=new InnerClassTest(); i.new InnerClass().B(); } }
從這個程序能夠看到,咱們在實例化內部類時,須要藉助外部類的對象,不然會報錯。但若是類改成static,就能夠直接調用。繼承
內部類除了能夠直接定義在類中,還能夠定義在類的方法中,但需注意的是該類只能在本方法中實例化。接口
好了,講了那麼多廢話,開始進入正題,匿名內部類!有沒有很開心??==
首先仍是從概念提及,匿名內部類的兩個特徵,一是匿名,而是內部類(哈哈哈又是廢話)。
咱們經過一個實際的例子來理解這個東西。博客
/** * @author lw * */ public interface TestInterface { public void print(); }
`class
/** * @author lw */ public class InnerClassTest { public static void main(String args[]) { TestInterface test=new TestInterface()//new一個接口很奇怪。。。 { public void print() { System.out.println("匿名內部類"); } }; test.print(); } }
這裏咱們能夠看到,匿名內部類的好處主要在於簡化代碼,用專業一點的話來講就是寫得比較優雅,若是不用匿名內部類的話咱們要實現該接口須要新建一個class,而後實現,但能夠想象,若是這個類咱們只用一次呢?這樣的新建class是否是徹底沒有必要,用匿名類的方法就能夠直接簡潔地實現了。咱們須要注意的是匿名內部類必定要對應一個父類或者接口,而後在裏面實現其須要的方法,額雖然在寫的時候new一個接口很奇怪。。。同時咱們要明確的是匿名內部類只能用一次,不能在外部複用,因此對於屢次使用的類不能用該方法。以上都是我的理解,若有不對望指正~晚安!test