Java innere Klassen

Java 对象和类Java-Objekte und Klassen

In diesem Kapitel lernen wir Java innere Klassen kennen.

In Java kann eine Klasse eine andere Klasse verschachteln. Die Syntax lautet wie folgt:

class OuterClass {   // 外部类
    // ...
    class NestedClass { // 嵌套类,或称为内部类
        // ...
    }
}

Um auf die innere Klasse zuzugreifen, können Sie ein Objekt der äußeren Klasse erstellen und dann ein Objekt der inneren Klasse erstellen.

Es gibt zwei Arten von verschachtelten Klassen:

  • Nicht-statische innere Klasse
  • Statische innere Klasse

Nicht-statische innere Klasse

Eine nicht-statische innere Klasse ist eine Klasse, die in einer anderen Klasse verschachtelt ist. Sie hat Zugriff auf die Mitglieder der äußeren Klasse und wird oft als innere Klasse bezeichnet.

Da die innere Klasse in der äußeren Klasse verschachtelt ist, müssen Sie zuerst die äußere Klasse instanziieren und dann ein Objekt der inneren Klasse erstellen.

Beispiel

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);
  }
}

Die Ausgabe des obigen Beispiels ist:

15

Private innere Klasse

Innere Klassen können mit private oder protected modifiziert werden. Wenn Sie nicht möchten, dass von außerhalb der äußeren Klasse auf die innere Klasse zugegriffen wird, können Sie den private-Modifikator verwenden:

Beispiel

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);
  }
}

Im obigen Beispiel wird InnerClass als private innere Klasse festgelegt, und bei der Ausführung wird ein Fehler gemeldet:

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

Statische innere Klasse

Statische innere Klassen können mit dem Schlüsselwort static definiert werden. Für statische innere Klassen müssen wir keine äußere Klasse erstellen, um auf sie zuzugreifen; wir können direkt auf sie zugreifen:

Beispiel

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);
  }
}

Die Ausgabe des obigen Beispiels ist:

5

Hinweis:Statische innere Klassen können nicht auf Mitglieder der äußeren Klasse zugreifen.

Zugriff auf Mitglieder der äußeren Klasse aus einer inneren Klasse

Eine fortgeschrittene Verwendung innerer Klassen besteht darin, dass sie auf die Eigenschaften und Methoden der äußeren Klasse zugreifen können:

Beispiel

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());
  }
}

Die Ausgabe des obigen Beispiels ist:

10

Java 对象和类Java-Objekte und Klassen

Andere Erweiterungen