Java內部類的總結

內部類是指在一個外部類的內部再定義一個類。內部類作爲外部類的一個

成員,並且依附於外部類而存在的。內部類可爲靜態,可用protected和

private修飾(而外部類只能使用public和缺省的包訪問權限)。內部類

主要有以下幾類:成員內部類、局部內部類、靜態內部類、匿名內部類

 

 



  爲什麼需要內部類?

  典型的情況是,內部類繼承自某個類或實現某個接口,內部類的代碼

操作創建其的外圍類的對象。所以你可以認爲內部類提供了某種進入其外

圍類的窗口。使用內部類最吸引人的原因是:

  每個內部類都能獨立地繼承自一個(接口的)實現,所以無論外圍類

是否已經繼承了某個(接口的)實現,對於內部類都沒有影響。如果沒有

內部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與編程問

題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完

整。接口解決了部分問題,而內部類有效地實現了“多重繼承”。

 

 



  A:成員內部類

  作爲外部類的一個成員存在,與外部類的屬性、方法並列。

 

  1. package cn.com.zxx;  
  2. /**  
  3.  * 成員內部類  
  4.  * @author acer  
  5.  * 注意:內部類是一個編譯時的概念,一旦編譯成功,就會成爲兩個不同的類,對於如下的兩個類,  
  6.  * 編譯完成後就變爲了:outer.class 和 outer$inner.class兩個類  
  7.  */ 
  8. public class Outer {  
  9.     private static int i =1;  
  10.     private int j =10;  
  11.     private int k =20;  
  12.       
  13.     public static void outer_f1(){  
  14.           
  15.     }  
  16.       
  17.     public void outer_f2(){  
  18.           
  19.     }   
  20.       
  21.     //成員內部類中,不能定義  
  22.     //成員內部類中,可以訪問外部內中的所有成員  
  23.     class Inner{  
  24. //      static int inner_i =100;  
  25.         int i =1;         
  26.         int j =100;  
  27.         void inner_f1(){  
  28.             System.out.println(i);  
  29.             System.out.println(j);  
  30.             System.out.println(this.j);  
  31.             System.out.println(Outer.this.j);  
  32.             System.out.println(k);  
  33.             outer_f1();  
  34.             outer_f2();  
  35.         }         
  36.     }  
  37.      
  38.     //外部類的非靜態方法訪問內部成員類  
  39.     public void outer_f3(){  
  40.         Inner inner = new Inner();  
  41.         inner.inner_f1();  
  42.     }  
  43.       
  44.     //外部類的靜態方法訪問內部類  
  45.     public static void outer_f4(){  
  46.         Outer outer = new Outer();  
  47.         Inner inner = outer.new Inner();  
  48.         inner.inner_f1();  
  49.     }  
  50.       
  51.     public static void main(String[] args) {  
  52. //outer_f4();  
  53.         //如果要直接創建內部類的對象,不想想當然地認爲只需要加上外圍內的名字就可以了   
  54.         //而是必須使用外部內的一個對象來創建一個內部類的對象  
  55.         Outer outer = new Outer();  
  56.         Inner inner = outer.new Inner();  
  57.         inner.inner_f1();  
  58.     }  
  59.       
  60. }  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章