匿名類,匿名內部類

不少在學習JAVA基礎的時候總會遇到一個問題,這個匿名內部類爲何只能用一次呢?他究竟是什麼玩意兒?爲何這裏會new一個接口???這什麼呀這是!ide

首先咱們來看一下內部類的定義: 在一個類中定義另外一個類,這樣定義的類稱爲內部類。【包含內部類的類能夠稱爲內部類的外部類】 若是想要經過一個類來使用另外一個類,能夠定義爲內部類。【好比蘋果手機類,蘋果手機類中的黃金版的是特別定製的】 內部類的外部類的成員變量在內部類中仍然有效,內部類中的方法也能夠調用外部類中的方法。【不管是靜態仍是非靜態的,內部類均可以直接調用外部 內部類的類體中不能夠聲明類變量和類方法 內部類能夠由外部類使用外部類中在函數中建立內部類對象來使用,若是內部類的權限是非私有,非靜態的,就能夠在外部其餘程序中被訪問到,就能夠經過建立外部類對象完成;若是內部類是靜態的,非私有的,靜態成員能夠直接類名調用,非靜態成員經過建立外部類對象使用。 再來看一下匿名類的定義: 匿名類,就是沒有名稱的類,其名稱由Java編譯器給出,通常是形如:外部類名稱+$+匿名類順序,沒有名稱也就是其餘地方就不能引用,不能實例化,只用一次,固然也就不能有構造器。 匿名類就是利用父類的構造函數和自身類體構形成一個類。 匿名類能夠繼承父類的方法,也能夠重寫父類的方法。 匿名類能夠訪問外部類的成員變量和方法,匿名類的類體不能夠聲明稱static成員變量和static方法。 匿名類因爲是一個new的結果,因此其實能夠賦值給一個父類對象。所以能夠分爲兩種匿名類,成員匿名類和局部匿名類(做爲函數參數) 上文都說匿名內部類就是沒有名字的內部類,哪一個類沒有名字呢?好多文章都是直接告訴你什麼什麼是匿名內部類,以下面: 咱們通常會用來作參數的傳遞, 直接用接口來作 public interface D { void run(); } public class B{@Overridepublic void run(D d) { d.run(); } } 看到這裏是否是仍是很疑惑,爲何接口也能new了呢?其實否則,在咱們寫一個內部類的時候,咱們是省略了一些東西的 public class cryptonym { public static void main(String[]args) { B b=new B(); //調用時使用匿名類建立匿名對象 b.show(new D( public void run() { System.out.println("hello");){ } }); }} 這樣來看是否是就明瞭許多了?其實本意就是繼承了D這個接口以後,重寫了其中的方法。只不過咱們再代碼中對這個類使用的次數很少。因此咱們不須要再去寫一個繼承的類,來加大JVM的工做量,是否是頗有意思。函數

相關文章
相關標籤/搜索