1.首先,把內部類作為外部類的一個特殊的成員來看待,因此它有類成員的封閉等級:private ,protected,默認(friendly),public 它有類成員的修飾符: static,final,abstract 2.非靜態內部類nested inner class,內部類隱含有一個外部類的指針this,因此,它可以訪問外部類的一切資源(當然包括private) 外部類訪問內部類的成員,先要取得內部類的對象,并且取決于內部類成員的封裝等級。 非靜態內部類不能包含任何static成員. 3.靜態內部類:static inner class,不再包含外部類的this指針,并且在外部類裝載時初始化. 靜態內部類能包含static或非static成員. 靜態內部類只能訪問外部類static成員. 外部類訪問靜態內部類的成員,循一般類法規。對于static成員,用類名.成員即可訪問,對于非static成員,只能 用對象.成員進行訪問
4.對于方法中的內部類或塊中內部類只能訪問塊中或方法中的final變量。
靜態內部類 和普通的類一樣,內部類也可以有靜態的。不過和非靜態內部類相比,區別就在于靜態內部類沒有了指向外部的引用。這實際上和C++中的嵌套類很相像了,Java內部類與C++嵌套類最大的不同就在于是否有指向外部的引用這一點上,當然從設計的角度以及以它一些細節來講還有區別。 除此之外,在任何非靜態內部類中,都不能有靜態數據,靜態方法或者又一個靜態內部類(內部類的嵌套可以不止一層)。不過靜態內部類中卻可以擁有這一切。這也算是兩者的第二個區別吧。