Java的內部類(Inner Class)是定義在另一個類中的類。它們有一些限制條件,主要包括以下幾點:
內部類不能使用static修飾符。它們必須依賴于外部類的實例才能存在。
內部類可以訪問外部類的所有成員(包括私有成員),即使這些成員被聲明為private。
內部類可以聲明為public或默認(沒有修飾符),但不能聲明為private,因為private成員只能在其所在的類中訪問。
內部類可以有多個實例,它們之間是相互獨立的。每個內部類實例都有自己的內存空間和狀態。
內部類的實例可以持有外部類實例的引用。這意味著內部類可以訪問外部類的非靜態成員。
內部類可以嵌套其他內部類,包括遞歸定義的內部類。
內部類不能使用基本數據類型作為其類型參數,只能使用引用類型(如類、接口或數組)。
內部類可以有靜態成員,但這些靜態成員必須是編譯時常量。
內部類不能直接訪問外部類的局部變量,除非這些局部變量被聲明為final或者實際上是常量。從Java 8開始,如果局部變量是一個數組或者實現了Serializable接口的對象,那么內部類可以訪問它。
內部類可以定義構造函數,但構造函數中不能直接訪問外部類的非靜態成員。不過,可以通過外部類實例來訪問這些成員。