大部分時候,類被定義在一個獨立的class中。在某些情況下,也會把一個類放在另一個類中的內部定義,這個定義在其他類內部的類被稱為內部類。包含內部類的類也被稱為外部類。
1、內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。
2、內部類成員可以直接訪問外部類私有數據,但外部類不能訪問內部類的實現細節。
3、匿名內部類僅適用于需要使用一次的類。
4、內部類比外部類可以多3個修飾符:PRivate、protected、static
5、非靜態內部類不能擁有靜態成員
定義格式
public class OuterClass{ class innerClassA{} public class innerClassB{} }從上面代碼可以看出,內部類在外部類成員位置,所以說內部類也可以訪問外部類的成員。
//TODO 內部類定義并在外部類使用,靜態方法不能new內部類
class OuterClass{ class InnerClass { } public static void main(String[] args){ InnerClass innerClass = new InnerClass(); }} 
靜態內部類
使用static修飾的一個內部類,則這個內部類屬于所在外部類本身,而不屬于外部類創建出來的某個對象,因此使用static修飾的內部類被稱為類內部類,有的地方也稱為靜態內部類。
靜態內部類可以包含靜態成員,也可以包含非靜態成員。根據靜態成員訪問規則,靜態內部類的方法或代碼塊不能訪問外部類的實例成員,只能訪問外部類的靜態成員。

//TODOclass OuterClass{ static String school; static class InnerClass { static{ school= "abcd"; } String name; String age; static String address; } public static void main(String[] args){ InnerClass innerClass = new InnerClass(); }}具有內部類的類被編譯后,編譯文件格式如下:

使用內部類
定義格式:
外部類.內部類變量名= new外部類().new 內部類();
class OuterClass{ class InnerClass { String name; public void printName(){ System.out.println(name); } } }class TestInnerClass{ public static void main(String[] args){ OuterClass.InnerClassinnerClass = new OuterClass().new InnerClass(); innerClass.name= "abcd"; innerClass.printName(); }}使用靜態內部類
外部類.內部類 變量名=new 外部類.內部類();
class OuterClass{ static class InnerClass { String name; public void printName(){ System.out.println(name); } } }class TestInnerClass{ public staticvoid main(String[] args){ OuterClass.InnerClassinnerClass = newOuterClass.InnerClass(); innerClass.name= "abcd"; innerClass.printName(); }}局部內部類
class OuterClass{ public void method(){ class InnerClass { Stringname = "abcd"; } InnerClass in = new InnerClass(); System.out.println(in.name); } }class TestInnerClass{ public static void main(String[] args){ OuterClass out = new OuterClass(); out.method(); }}匿名內部類
匿名內部類沒有類名,適用于:僅使用一次的時候。New 該類的父類或接口代表該匿名內部類。
class OuterClass{ public void method(){ new InnerClass(){ public void method(){ System.out.println("這是一個匿名內部類"); } }.method(); } }class InnerClass{ void method(){};}
新聞熱點
疑難解答