在java里類中再定義類,這種在其他類內部類叫做內部類,在Android開發里最常見有三種內部類分別是(成員內部類、方法內部類、匿名內部類)
一、成員內部類
1 public class Test { 2 //不對外開放的 3 class memberInnerClass{ 4 public void memberInner(){ 5 System.out.println("成員內部類"); 6 } 7 } 8 }
編譯一下,我們看到目錄中出現了兩個class文件在我們的工作目錄里,可以看到多出一個Test$memberInClass.class的文件,這是就是內部類編譯后的class文件

成員內部類的特點:
- 內部類就像一個實例成員一樣存在於外部類中。
- 內部類可以訪問外部類的所有成員就想訪問自己的成員一樣沒有限制。
- 內部類中的this指的是內部類的實例對象本身,如果要用外部類的實例對象就可以用類名.this的方式獲得。
- 內部類對象中不能有靜態成員,原因很簡單,內部類的實例對象是外部類實例對象的一個成員。
二、方法內部類
1 public class A { 2 3 public void A(){ 4 System.out.println("方法內部類"); 5 } 6 7 }
1 public class Test { 2 3 public void methodInner(){ 4 //短暫性的 5 class B extends A{ 6 7 } 8 new B().A(); 9 } 10 }
方法內部類特點:
- 方法中的內部類沒有訪問修飾符, 即方法內部類對包圍它的方法之外的任何東西都不可見。
- 方法內部類只能夠訪問該方法中的局部變量,所以也叫局部內部類。而且這些局部變量一定要是final修飾的常量。
三、匿名內部類(在Android里最常見的一種)
當我們把內部類的定義和聲明寫到一起時,就不用給這個類起個類名而是直接使用了,這種形式的內部類根本就沒有類名,因此我們叫它匿名內部類
1 public abstract class A implements B{ 2 3 public void A(){ 4 System.out.println("A"); 5 } 6 7 }
1 public interface B{ 2 3 public void B(); 4 5 }
1 public class Test { 2 3 public static void main(String[] args) { 4 //new出接口或者實現類 5 A a= new A (){ 6 //實現接口里未實現的方法 7 public void B() { 8 System.out.println("匿名內部類"); 9 } 10 }; 11 a.A(); 12 a.B(); 13 }
匿名內部類的特點:
- 一個類用於繼承其他類或是實現接口,並不需要增加額外的方法,只是對繼承方法的事先或是覆蓋。
- 只是為了獲得一個對象實例,不需要知道其實際類型。
- 類名沒有意義,也就是不需要使用到。
