對main方法而言,雖然寫在類中,它是游離於任何類之外的,因此某類的非靜態內部類對它而言是不直接可見的,也就無法直接訪問 。
1:非靜態內部類,必須有一個外部類的引用才能創建。
2:在外部類的非靜態方法中,因為有隱含的外部類引用this,所以可以直接創建非靜態內部類。
3:在外部類的靜態方法中,因為沒有this,所以必須先獲得外部類引用,然后創建非靜態內部類。
4:靜態內部類,不需要外部類引用就可以直接創建。
5:同時靜態的內部類,也不能直接訪問外部類的非靜態方法。
6:由此可以推測,非靜態內部類之所以可以直接訪問外部類的方法,是因為創建非靜態內部類時,有一個隱含的外部類引用被傳遞進來。
public class OuterClass { public static void main(String[] args) { OuterClass outerClass = new OuterClass(); InnerClass innerClass = outerClass.new InnerClass(); StaticInnerClass staticInnerClass = new StaticInnerClass(); } public void foo() { InnerClass innerClass = new InnerClass(); StaticInnerClass staticInnerClass = new StaticInnerClass(); } public class InnerClass { } public static class StaticInnerClass { } }