Java 內部類

Java 對象和類 Java 對象和類

在章節我們將來學習 Java 的內部類。

Java 一個類中可以嵌套另外一個類,語法格式如下:

class OuterClass {   // 外部類
    // ...
    class NestedClass { // 嵌套類,或稱為內部類
        // ...
    }
}

要訪問內部類,可以通過創建外部類的對象,然后創建內部類的對象來實現。

嵌套類有兩種類型:

  • 非靜態內部類
  • 靜態內部類

非靜態內部類

非靜態內部類是一個類中嵌套著另外一個類。 它有訪問外部類成員的權限, 通常被稱為內部類。

由于內部類嵌套在外部類中,因此必須首先實例化外部類,然后創建內部類的對象來實現。

實例

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

以上實例執行輸出結果為:

15

私有的內部類

內部類可以使用 private 或 protected 來修飾,如果你不希望內部類被外部類訪問可以使用 private 修飾符:

實例

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

以上實例 InnerClass 設置為私有內部類,執行會報錯:

MyMainClass.java:12: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
             ^

靜態內部類

靜態內部類可以使用 static 關鍵字定義,靜態內部類我們不需要創建外部類來訪問,可以直接訪問它:

實例

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

以上實例執行輸出結果為:

5

注意:靜態內部類無法訪問外部類的成員。

從內部類訪問外部類成員

內部類一個高級的用法就是可以訪問外部類的屬性和方法:

實例

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

以上實例執行輸出結果為:

10

Java 對象和類 Java 對象和類