1. 程式人生 > >內部類與無名內部類

內部類與無名內部類

內部類 無名內部類

內部類:

內部類是類中的類,內部類也屬於類的一個成員。內部類分靜態類和實例類,內部類也可以進行繼承、實現接口等類可以做的操作。

實例類:

技術分享


內部類也是類中成員,也有靜態和實例的區分,所以實例的內部類實際上相當於一個實例成員,要註意的是:實例的內部類不可以寫靜態的成員。實例內部類基本可以對外類的所有成員進行訪問:

技術分享


因為實例成員要在new對象時才會分配內存,所以在外類需要構建實例內部類的對象時,必須先得構建加載外類的對象來構建實例內部類的對象。例如:

技術分享


靜態內部類:

靜態內部類就像類的靜態成員一樣,使用static關鍵字聲明。靜態內部類不可以對外類或其他類的實例成員進行訪問,靜態內部類也是像靜態成員一樣在類加載時就加載分配內存,所以不需要創建外類的對象就可以構建靜態內部類的對象。例如:

技術分享


內部類可以做類可以做的事情,例如繼承父類實現接口等:

技術分享


內部接口:

可以在類中聲明一個內部接口,這個接口可以被類實現。與普通接口一樣唯一的區別就是申請在內部。例如:

技術分享



內部抽象類:

可以在類中聲明一個內部抽象類,普通抽象類和純抽象類都可以,這個抽象類可以被子類繼承。與普通抽象類一樣唯一的區別就是申請在內部。例如:

技術分享


內部類會不會產生class文件呢?:

只要是聲明的是類都會產生一個class文件:

技術分享

技術分享

會產生圖片中這種命名格式的class文件:Five$A.class=外類名$內部類名.class



無名內部類:

申請一個無名內部類的話,這個類會自動繼承於外類,可以重寫父類的方法,無名內部類可以寫在main方法內,但是不可以寫靜態成員。例如:

技術分享


這種寫法也是申請一個無名內部類:

技術分享


還可以聲明一個自動繼承別的類的無名內部類:

技術分享


無名內部類也是會產生一個class文件:

技術分享

會產生圖片中這種命名格式的class文件:Five$1.class=外類名$無名內部類名(用數字表示).class


本文出自 “12831981” 博客,請務必保留此出處http://12841981.blog.51cto.com/12831981/1974346

內部類與無名內部類