Java中靜態內部類和非靜態內部類有什麼區別?

飛誮絕戀


Java中的內部類是在Jdk1.1版本之後增加的,內部類是Java語言中一個比較重要的概念,如果能把內部類運用好,那麼會明顯增強Java程序的靈活性。

要想清楚static內部類和非static內部類的區別,首先要了解內部類的概念及特點,然後再進行一個全面的對比。

什麼是內部類呢?簡單的說就是在一個類的內部又定義了一個類,這個類就稱之為內部類(Inner Class)。看一個簡單的例子:

內部類有以下幾個主要的特點:

第一,內部類可以訪問其所在類的屬性(包括所在類的私有屬性),內部類創建自身對象需要先創建其所在類的對象,看一個例子:

第二,可以定義內部接口,且可以定義另外一個內部類實現這個內部接口,看一個例子:

第三,可以在方法體內定義一個內部類,方法體內的內部類可以完成一個基於虛方法形式的回調操作,看一個例子:

第四,內部類不能定義static元素,看一個例子:

第五,內部類可以多嵌套,看一個例子:

static內部類是內部類中一個比較特殊的情況,Java文檔中是這樣描述static內部類的:一旦內部類使用static修飾,那麼此時這個內部類就升級為頂級類。

也就是說,除了寫在一個類的內部以外,static內部類具備所有外部類的特性,看一個例子:

通過這個例子我們發現,static內部類不僅可以在內部定義static元素,而且在構建對象的時候也可以一次完成。從某種意義上說,static內部類已經不算是嚴格意義上的內部類了。

與static內部類不同,內部接口自動具備靜態屬性,也就是說,普通類是可以直接實現內部接口的,看一個例子:

關於Java內部類的應用可以通過實際使用來進一步理解。

我使用Java編程多年,我會陸續在頭條寫一些關於Java方面的文章,感興趣的朋友可以關注我的頭條號,相信一定會有所收穫。

如果有Java編程方面的問題,也可以諮詢我。

謝謝!


分享到:


相關文章: