Innere Java -Klassen


Innere Java-Klassen

In Java ist es auch möglich, Klassen zu verschachteln (eine Klasse in einer Klasse). Der Zweck verschachtelter Klassen besteht darin, zusammengehörende Klassen zu gruppieren, wodurch Ihr Code lesbarer und wartbarer wird.

Um auf die innere Klasse zuzugreifen, erstellen Sie ein Objekt der äußeren Klasse und dann ein Objekt der inneren Klasse:

Beispiel

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

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

// Outputs 15 (5 + 10)


Private innere Klasse

Im Gegensatz zu einer "normalen" Klasse kann eine innere Klasse privateoder sein protected. Wenn Sie nicht möchten, dass externe Objekte auf die innere Klasse zugreifen, deklarieren Sie die Klasse als private:

Beispiel

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

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

Wenn Sie versuchen, von einer externen Klasse aus auf eine private innere Klasse zuzugreifen, tritt ein Fehler auf:

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



Statische innere Klasse

Eine innere Klasse kann auch sein static, was bedeutet, dass Sie darauf zugreifen können, ohne ein Objekt der äußeren Klasse zu erstellen:

Beispiel

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

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

// Outputs 5

Hinweis: Genau wie staticAttribute und Methoden hat eine staticinnere Klasse keinen Zugriff auf Mitglieder der äußeren Klasse.


Greifen Sie von der inneren Klasse auf die äußere Klasse zu

Ein Vorteil innerer Klassen ist, dass sie auf Attribute und Methoden der äußeren Klasse zugreifen können:

Beispiel

class OuterClass {
  int x = 10;

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

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

// Outputs 10