定義以下:java
class OutClass{ static class InnerClass{} //靜態內部類 }
靜態內部類是指被聲明爲static的內部類,它不依賴與外部類實例而被實例化。靜態內部類不能訪問外部類的普通成員變量,只能訪問外部類中的靜態成員和靜態方法(包含私有類型)。ide
2.成員內部類(member inner class)函數
定義以下:code
class OutClass{ class InnerClass{} //成員內部類 }
成員內部類就是普通的內部類,能夠自由引用外部類的方法,無論是靜態仍是非靜態,可是內部不能夠定義靜態的方法和屬性,並且只有被內部類被實例化後,這個類才能被實例化。繼承
3.局部內部類(local inner class)接口
定義以下:class
class OutClass{ public void doSomeWork(){ class innerClass{} //局部內部類 } }
局部內部類是定義在代碼塊中的類,它的做用範圍爲所在的代碼塊中,極少用到。局部內部類跟局部變量比較相似,不能被public、protected、private以及static修飾,只能訪問方法中定義爲final類型的局部變量。若是局部內部類,在靜態的代碼塊或者方法中,則會變成局部靜態內部類。變量
4.匿名內部類(anonymous inner class)構造函數
定義以下:引用
class OutClass{ new Runnable(){ @Override public void run() { } }.run(); }
匿名內部類是一個沒有類名的內部類,不能使用關鍵字class、extends、implement,沒有構造函數,自身必須繼承其餘類或者接口。匿名內部類的好處是代碼更加簡潔。使用內部類須要牢記一下幾個原則:
1.匿名內部類不能有構造函數;
2.匿名內部類不能定義靜態成員、方法和類;
3.匿名內部類不能是public、protected、private、static;
4.只能建立內部類的一個實例;
5.一個匿名內部類必定是在new的後面,必須繼承一個父類或者實現一個接口;
6.匿名內部類爲局部內部類,因此局部內部類的全部限制都對其生效。