第一時間獲取技術乾貨和業界資訊!程序員
最近推廣了一個關於面試的活動。我看了一下章節,其中有一個面試題是說什麼是內部類?內部類的特色是什麼?面試
看到這個題,我忽然想到,工做這麼多年,對內部類的關注一直都比較少。因而,在一次面試的機會中,我問了一個號稱有 10 年工做經驗的程序員:「鏈表爲何使用內部類實現?」ide
他支支吾吾,半天沒有解釋清楚爲何?因而,我百度搜索了好久,只發現阿里雲上有一個免費的課程提到了「鏈表爲何使用內部類實現?」阿里雲
可是這個解釋很是的短,也很是的含蓄。因此,本文就根據我本身的工做經驗來講說,鏈表爲何使用內部類實現?blog
說實話,Java 中使用鏈表的地方仍是蠻多的,可是爲何不把鏈表單獨抽取出來做爲一個類,使用的地方組合或者繼承一下呢?繼承
要解釋這個問題,咱們先來看一看內部類的特色。it
第一個特色,內部類能夠訪問其所在類的私有屬性和方法。這一點就很像孕媽媽肚裏的小寶寶同樣,能夠很方便的吸取一些媽媽的養分。以 HashMap 爲例,它裏面有好幾個內部類。觀察這幾個內部類你會發現有一個共同特色就是內部類能夠很方便的訪問所在外部類的一些私有屬性和方法。若是你把鏈表給抽取出來,你會發現,最終的鏈表實現起來難了不少。class
第二個特色,內部類能夠隱藏起來,不被同一個包中的其餘類訪問,若是一個類只對某個類提供使用,那麼能夠將其定義爲內部類。這個特色在 HashMap 等集合中也有體現,具體來講就是各個內部類都是輔助所在的外部類的。做爲外部類的一部分,具備強關聯性。而且不但願除了所屬的外部類使用外的其餘類進行訪問。百度
第三個特色,能夠聯合外部類解決多繼承問題。這也是我認爲很是重要的一個特色。仍是以 HashMap 爲例,它自己繼承了 AbstractMap。可是它的全部內部類,都又有了各自的繼承。表單
關於鏈表爲何使用內部類實現?我就經過以上 3 點來解釋。其中最重要的我認爲是第 3 點。以上,但願可以幫助到你們,若是有更好的觀點,請公衆號裏留言評論,謝謝!