java靜態內部類(嵌套類)

 如果你不需要內部類對象與其外圍類對象之間有聯繫,那你可以將內部類聲明爲static。這通常稱爲嵌套類(nested class)。想要理解static應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部類是static的時,就不是這樣了。嵌套類意味着: 
1. 要創建嵌套類的對象,並不需要其外圍類的對象。 
2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。 
  
public class Outer { 
       private static int i = 1; 
       private int j = 10; 
       public static void outer_f1() { 
       } 
  
       public void outer_f2() { 
       } 
  
       // 靜態內部類可以用public,protected,private修飾 
       // 靜態內部類中可以定義靜態或者非靜態的成員 
       static class Inner { 
              static int inner_i = 100; 
              int inner_j = 200; 
              static void inner_f1() { 
                      //靜態內部類只能訪問外部類的靜態成員(包括靜態變量和靜態方法) 
                     System.out.println("Outer.i" + i); 
                     outer_f1(); 
              } 
  
              void inner_f2() { 
                     // 靜態內部類不能訪問外部類的非靜態成員(包括非靜態變量和非靜態方法)  
                     // System.out.println("Outer.i"+j); 
                     // outer_f2(); 
              } 
       } 
  
       public void outer_f3() {       // 外部類訪問內部類的靜態成員:內部類.靜態成員 
              System.out.println(Inner.inner_i); 
              Inner.inner_f1(); 
              // 外部類訪問內部類的非靜態成員:實例化內部類即可 
              Inner inner = new Inner(); 
              inner.inner_f2(); 
       } 
  
       public static void main(String[] args) { 
              newOuter().outer_f3(); 
       } 

生成一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成爲了一個頂級類(正常情況下,你不能在接口內部放置任何代碼,但嵌套類可以作爲接口的一部分,因爲它是static 的。只是將嵌套類置於接口的命名空間內,這並不違反接口的規則)

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