内部類:
内部類是類中的類,内部類也屬于類的一個成員。内部類分靜态類和執行個體類,内部類也可以進行繼承、實作接口等類可以做的操作。
執行個體類:
<a href="https://s3.51cto.com/oss/201710/19/07bdd08c7527415934b44610263f8c4d.png" target="_blank"></a>
内部類也是類中成員,也有靜态和執行個體的區分,是以執行個體的内部類實際上相當于一個執行個體成員,要注意的是:執行個體的内部類不可以寫靜态的成員。執行個體内部類基本可以對外類的所有成員進行通路:
<a href="https://s3.51cto.com/oss/201710/19/b14076099dde5c41f9e70a41d4f77701.png" target="_blank"></a>
因為執行個體成員要在new對象時才會配置設定記憶體,是以在外類需要建構執行個體内部類的對象時,必須先得建構加載外類的對象來建構執行個體内部類的對象。例如:
<a href="https://s5.51cto.com/oss/201710/19/f11a34eb4d359e628b2388001affa1a8.png" target="_blank"></a>
靜态内部類:
靜态内部類就像類的靜态成員一樣,使用static關鍵字聲明。靜态内部類不可以對外類或其他類的執行個體成員進行通路,靜态内部類也是像靜态成員一樣在類加載時就加載配置設定記憶體,是以不需要建立外類的對象就可以建構靜态内部類的對象。例如:
<a href="https://s3.51cto.com/oss/201710/19/e4f7319ed17a27f257ca1b9bc4002288.png" target="_blank"></a>
内部類可以做類可以做的事情,例如繼承父類實作接口等:
<a href="https://s1.51cto.com/oss/201710/19/23e2ea1678845985ab7591bff25e9b9a.png" target="_blank"></a>
内部接口:
可以在類中聲明一個内部接口,這個接口可以被類實作。與普通接口一樣唯一的差別就是申請在内部。例如:
<a href="https://s1.51cto.com/oss/201710/19/435f71c2379ba2b3e95b18addb1bbdc6.png" target="_blank"></a>
内部抽象類:
可以在類中聲明一個内部抽象類,普通抽象類和純抽象類都可以,這個抽象類可以被子類繼承。與普通抽象類一樣唯一的差別就是申請在内部。例如:
<a href="https://s2.51cto.com/oss/201710/19/960349ceefc6401ba4f5d0b6c9965752.png" target="_blank"></a>
内部類會不會産生class檔案呢?:
隻要是聲明的是類都會産生一個class檔案:
<a href="https://s4.51cto.com/oss/201710/19/ef7c141fa1e6b3c4aa59d6d7c943c8b6.png" target="_blank"></a>
<a href="https://s4.51cto.com/oss/201710/19/faf24a241a0296f666b4d46226dd8797.png" target="_blank"></a>
會産生圖檔中這種命名格式的class檔案:Five$A.class=外類名$内部類名.class
無名内部類:
申請一個無名内部類的話,這個類會自動繼承于外類,可以重寫父類的方法,無名内部類可以寫在main方法内,但是不可以寫靜态成員。例如:
<a href="https://s4.51cto.com/oss/201710/19/b797f3b1336cc4c0a7991c685840cd57.png" target="_blank"></a>
這種寫法也是申請一個無名内部類:
<a href="https://s5.51cto.com/oss/201710/19/64a37ac48faebd9ec64664054b388d2f.png" target="_blank"></a>
還可以聲明一個自動繼承别的類的無名内部類:
<a href="https://s2.51cto.com/oss/201710/19/cd6ed94f2ad9a551dc6b3c72e0bd5ee3.png" target="_blank"></a>
無名内部類也是會産生一個class檔案:
<a href="https://s3.51cto.com/oss/201710/19/a61c55cd41ca3a77c72f241e882b18fe.png" target="_blank"></a>
會産生圖檔中這種命名格式的class檔案:Five$1.class=外類名$無名内部類名(用數字表示).class
本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1974346,如需轉載請自行聯系原作者