知乎昭言說
根據(jù)Oracle官方的說法:
Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes.
從字面上看,一個被稱為靜態(tài)嵌套類,一個被稱為內(nèi)部類。從字面的角度解釋是這樣的:什么是嵌套?嵌套就是我跟你沒關(guān)系,自己可以完全獨立存在,但是我就想借你的殼用一下,來隱藏一下我自己(真TM猥瑣)。什么是內(nèi)部?內(nèi)部就是我是你的一部分,我了解你,我知道你的全部,沒有你就沒有我。(所以內(nèi)部類對象是以外部類對象存在為前提的)至于具體的使用場景,我就不當翻譯工了,有興趣的直接去官網(wǎng)看吧。
知乎鐵心男說
靜態(tài)內(nèi)部類就是個獨立的類。之所以要弄這么個東西,只是起到一個注釋的效果,而且這個注釋可靜態(tài)檢查。比如有A,B兩個類,B有點特殊,雖然可以獨立存在,但只被A使用。這時候怎么辦?如果把B并入A里,復(fù)雜度提高,搞得A違反單一職責(zé)。如果B獨立,又可能被其他類(比如同一個包下的C)依賴,不符合設(shè)計的本意。所以不如將其變成A.B,等于添加個注釋,告訴其他類別使用B了,它只跟A玩。非靜態(tài)的才是真正的內(nèi)部類,對其外部類有個引用。