面試題:連結串列為什麼使用內部類實現?

業餘草發表於2019-04-09

點選上方“業餘草”,選擇“置頂公眾號”

第一時間獲取技術乾貨和業界資訊!

640?wx_fmt=png

640?wx_fmt=png

最近推廣了一個關於面試的活動。我看了一下章節,其中有一個面試題是說什麼是內部類?內部類的特點是什麼?

看到這個題,我突然想到,工作這麼多年,對內部類的關注一直都比較少。於是,在一次面試的機會中,我問了一個號稱有 10 年工作經驗的程式設計師:“連結串列為什麼使用內部類實現?”

他支支吾吾,半天沒有解釋清楚為什麼?於是,我百度搜尋了很久,只發現阿里雲上有一個免費的課程提到了“連結串列為什麼使用內部類實現?”

但是這個解釋非常的短,也非常的含蓄。所以,本文就根據我自己的工作經驗來說說,連結串列為什麼使用內部類實現?

640

說實話,Java 中使用連結串列的地方還是蠻多的,但是為什麼不把連結串列單獨抽取出來作為一個類,使用的地方組合或者繼承一下呢?

要解釋這個問題,我們先來看一看內部類的特點。

第一個特點,內部類可以訪問其所在類的私有屬性和方法。這一點就很像孕媽媽肚裡的小寶寶一樣,可以很方便的吸收一些媽媽的營養。以 HashMap 為例,它裡面有好幾個內部類。觀察這幾個內部類你會發現有一個共同特點就是內部類可以很方便的訪問所在外部類的一些私有屬性和方法。如果你把連結串列給抽取出來,你會發現,最終的連結串列實現起來難了很多。

第二個特點,內部類可以隱藏起來,不被同一個包中的其他類訪問,如果一個類只對某個類提供使用,那麼可以將其定義為內部類。這個特點在 HashMap 等集合中也有體現,具體來說就是各個內部類都是輔助所在的外部類的。作為外部類的一部分,具有強關聯性。並且不希望除了所屬的外部類使用外的其他類進行訪問。

第三個特點,可以聯合外部類解決多繼承問題。這也是我認為非常重要的一個特點。還是以 HashMap 為例,它本身繼承了 AbstractMap。但是它的所有內部類,都又有了各自的繼承。

關於連結串列為什麼使用內部類實現?我就通過以上 3 點來解釋。其中最重要的我認為是第 3 點。以上,希望能夠幫助到大家,如果有更好的觀點,請公眾號裡留言評論,謝謝!

640?wx_fmt=png

10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!

640?wx_fmt=png

 你再主動一點點 640?  我們就有故事了

相關文章