工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java ネストされた静的クラス

Java ネストされた静的クラス

このチュートリアルでは、例を使用してネストされた静的クラスについて学習します。また、静的クラスと内部クラスの違いについても学びます。

前のチュートリアルで学んだように、Java では別のクラス内にクラスを作成できます。このようなクラスは、ネストされたクラスと呼ばれます。 Java では、ネストされたクラスには次の 2 つのタイプがあります:

前のチュートリアルで既に内部クラスについて説明しました。内部クラスについて知りたい場合は、Java Nested Class にアクセスしてください。

このチュートリアルでは、ネストされた静的クラスについて学習します。


Java ネストされた静的クラス

キーワード static を使用します ネストされたクラスを静的にします。

注: Java では、ネストされたクラスのみを静的にすることができます。

通常のクラスと同様に、ネストされた静的クラスには、静的および非静的の両方のフィールドとメソッドを含めることができます。たとえば、

Class Animal {
   static class Mammal {
      // static and non-static members of Mammal
   }
   // members of Animal
} 

ネストされた静的クラスは外部クラスに関連付けられます。

ネストされた静的クラスにアクセスするために、外側のクラスのオブジェクトは必要ありません。


例:静的ネスト クラス

class Animal {

// inner class
   class Reptile {
      public void displayInfo() {
        System.out.println("I am a reptile.");
      }
   }

// static class
   static class Mammal {
      public void displayInfo() {
        System.out.println("I am a mammal.");
      }
   }
}

class Main {
   public static void main(String[] args) {
      // object creation of the outer class
      Animal animal = new Animal();

      // object creation of the non-static class
      Animal.Reptile reptile = animal.new Reptile();
      reptile.displayInfo();

      // object creation of the static nested class
      Animal.Mammal mammal = new Animal.Mammal();
      mammal.displayInfo();

   }
}

出力

I am a reptile.
I am a mammal.

上記のプログラムでは、ネストされた 2 つのクラス Mammal があります。 そして爬虫類 クラス Animal 内 .

非静的クラス Reptile のオブジェクトを作成するために、

Animal.Reptile reptile = animal.new Reptile()

静的クラス Mammal のオブジェクトを作成するには 、使用しました

Animal.Mammal mammal = new Animal.Mammal()

外部クラスのメンバーへのアクセス

Java では、ネストされた静的クラスは外部クラスに関連付けられます。これが、ネストされた静的クラスが外側のクラスのクラス メンバー (静的フィールドとメソッド) にしかアクセスできない理由です。

外部クラスの非静的フィールドとメソッドにアクセスしようとするとどうなるか見てみましょう。

例:非静的メンバーへのアクセス

class Animal {
  static class Mammal {
   public void displayInfo() {
     System.out.println("I am a mammal.");
   }
 }

 class Reptile {
   public void displayInfo() {
     System.out.println("I am a reptile.");
   }
 }

 public void eat() {
   System.out.println("I eat food.");
 }
}

class Main {
 public static void main(String[] args) {
   Animal animal = new Animal();
   Animal.Reptile reptile = animal.new Reptile();
   reptile.displayInfo();

   Animal.Mammal mammal = new Animal.Mammal();
   mammal.displayInfo();
   mammal.eat();
 }
}

出力

Main.java:28: error: cannot find symbol
    mammal.eat();
          ^
  symbol:   method eat()
  location: variable mammal of type Mammal
1 error
compiler exit status 1

上記の例では、非静的メソッド eat() を作成しました。 クラス Animal 内 .

eat() にアクセスしようとすると オブジェクト 哺乳類 を使用する 、コンパイラはエラーを表示します。

哺乳類だからです は静的クラスのオブジェクトであり、静的クラスから非静的メソッドにアクセスすることはできません。


静的トップレベル クラス

前述のように、ネストされたクラスのみを静的にできます。静的トップレベル クラスを持つことはできません。

トップレベル クラスを静的にしようとするとどうなるか見てみましょう。

static class Animal {
 public static void displayInfo() {
   System.out.println("I am an animal");
 }
}

class Main {
 public static void main(String[] args) {
   Animal.displayInfo();
 }
}

出力

Main.java:1: error: modifier static not allowed here
static class Animal {
       ^
1 error
compiler exit status 1

上記の例では、静的クラス Animal を作成しようとしました . Java では静的トップレベル クラスが許可されていないため、エラーが発生します。


Java

  1. C# 静的キーワード
  2. C# ネストされたクラス
  3. Java 最終キーワード
  4. オペレーターの Java インスタンス
  5. Java のネストされた内部クラス
  6. Java匿名クラス
  7. Java シングルトン クラス
  8. Java リフレクション
  9. Java ObjectOutputStream クラス
  10. Javaジェネリック
  11. Java ファイル クラス