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 private
oder 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 static
Attribute und Methoden hat eine static
innere 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