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