Java靜態內部類


靜態成員類不是內部類在另一個類的主體中定義的成員類可以宣告為靜態。

範例

以下程式碼宣告了頂級類A和靜態成員類B:

class A {
  // Static member class
  public static class B {
    // Body for class B goes here
  }
}

靜態成員類不是內部類。 它被認為是一個頂級類。靜態成員類也稱為巢狀頂級類。A類的範例和B類的範例可以獨立存在,因為它們都是頂級類。

靜態成員類可以宣告為publicprotectedpackage-levelprivate,以限制其在其封閉類之外的可存取性。

使用靜態成員類有兩個好處:

  • 靜態成員類可以存取其包含類的靜態成員,包括私有靜態成員。
  • 一個包通過提供一個名稱空間,就像一個頂級類的容器。 具有靜態成員類的頂級類提供了額外的名稱空間層。

靜態成員類是其封閉頂級類的直接成員,而不是包的成員。
靜態成員類的物件的建立方式與使用new運算子建立頂級類的物件的方式相同。 要建立一個B類的物件,如下所示 -

A.B bReference = new A.B();

由於類B的名稱在類A中的範圍內,因此可以使用其簡單名稱在類A中建立其物件。

B  bReference2 = new B(); // This  statement appears inside class  A  code

還可以通過匯入com.yiibai.innerclasses.A.B類,使用A類之外的簡單名稱B.

範例-2

下面的程式碼顯示了如何使用靜態內部類。

public class Main {
  public static void main(String[] args) {
    Car.Tire m = new Car.Tire(17);
    Car.Tire m2 = new Car.Tire(19);

    Car.Keyboard k = new Car.Keyboard(122);
    Car.Keyboard k1 = new Car.Keyboard(142);

    System.out.println(m);
    System.out.println(m2);
    System.out.println(k);
    System.out.println(k1);
  }
}
class Car {
  // Static member class - Monitor
  public static class Tire {
    private int size;

    public Tire(int size) {
      this.size = size;
    }

    public String toString() {
      return "Monitor   - Size:" + this.size + "  inch";
    }
  }

  // Static member class - Keyboard
  public static class Keyboard {
    private int keys;

    public Keyboard(int keys) {
      this.keys = keys;
    }

    public String toString() {
      return "Keyboard  - Keys:" + this.keys;
    }
  }
}

上面的程式碼生成以下結果。

Monitor   - Size:17  inch
Monitor   - Size:19  inch
Keyboard  - Keys:122
Keyboard  - Keys:142