2019-04-08 13:33:25 2353瀏覽
很多在學(xué)習(xí)Java基礎(chǔ)的時候總會遇到一個問題,這個匿名內(nèi)部類為什么只能用一次呢?他到底是什么玩意兒?為什么這里會new一個接口???這什么呀這是!本篇文章扣丁學(xué)堂Java培訓(xùn)小編給讀者們分享一下匿名類,匿名內(nèi)部類。
首先我們來看一下內(nèi)部類的定義:
在一個類中定義另一個類,這樣定義的類稱為內(nèi)部類?!景瑑?nèi)部類的類可以稱為內(nèi)部類的外部類】
如果想要通過一個類來使用另一個類,可以定義為內(nèi)部類。【比如蘋果手機(jī)類,蘋果手機(jī)類中的黃金版的是特別定制的】
內(nèi)部類的外部類的成員變量在內(nèi)部類中仍然有效,內(nèi)部類中的方法也可以調(diào)用外部類中的方法。【不論是靜態(tài)還是非靜態(tài)的,內(nèi)部類都可以直接調(diào)用外部】
內(nèi)部類的類體中不可以聲明類變量和類方法
內(nèi)部類可以由外部類使用外部類中在函數(shù)中創(chuàng)建內(nèi)部類對象來使用,如果內(nèi)部類的權(quán)限是非私有,非靜態(tài)的,就可以在外部其他程序中被訪問到,就可以通過創(chuàng)建外部類對象完成;如果內(nèi)部類是靜態(tài)的,非私有的,靜態(tài)成員可以直接類名調(diào)用,非靜態(tài)成員通過創(chuàng)建外部類對象使用。
再來看一下匿名類的定義:
匿名類,就是沒有名稱的類,其名稱由Java編譯器給出,一般是形如:外部類名稱+$+匿名類順序,沒有名稱也就是其他地方就不能引用,不能實例化,只用一次,當(dāng)然也就不能有構(gòu)造器。
匿名類就是利用父類的構(gòu)造函數(shù)和自身類體構(gòu)造成一個類。
匿名類可以繼承父類的方法,也可以重寫父類的方法。
匿名類可以訪問外部類的成員變量和方法,匿名類的類體不可以聲明稱static成員變量和static方法。
匿名類由于是一個new的結(jié)果,所以其實可以賦值給一個父類對象。因此可以分為兩種匿名類,成員匿名類和局部匿名類(作為函數(shù)參數(shù))
上文都說匿名內(nèi)部類就是沒有名字的內(nèi)部類,哪個類沒有名字呢?好多文章都是直接告訴你什么什么是匿名內(nèi)部類,如下面:
我們一般會用來做參數(shù)的傳遞, 直接用接口來做
public interface D { void run(); }
public class B{@Overridepublic void run(D d) { d.run(); } }
看到這里是不是還是很疑惑,為什么接口也能new了呢?其實不然,在我們寫一個內(nèi)部類的時候,我們是省略了一些東西的
public class cryptonym { public static void main(String[]args) { B b=new B(); //調(diào)用時使用匿名類創(chuàng)建匿名對象 b.show(new D( public void run() { System.out.println("hello");){ } }); }}
這樣來看是不是就明了許多了?其實本意就是繼承了D這個接口之后,重寫了其中的方法。只不過我們再代碼中對這個類使用的次數(shù)不多。所以我們不需要再去寫一個繼承的類,來加大JVM的工作量,是不是很有意思。
想要了解更多關(guān)于Java開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學(xué)堂Java培訓(xùn)官網(wǎng)、微信等平臺,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育有專業(yè)的Java講師為您指導(dǎo),此外扣丁學(xué)堂老師精心推出的Java視頻教程定能讓你快速掌握J(rèn)ava從入門到精通開發(fā)實戰(zhàn)技能??鄱W(xué)堂Java技術(shù)交流群:850353792。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】 【掃碼進(jìn)入Python全棧開發(fā)免費公開課】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>