Verschachtelte statische Java-Klasse
Java verschachtelte statische Klasse
In diesem Tutorial lernen Sie anhand von Beispielen verschachtelte statische Klassen kennen. Außerdem erfahren Sie, wie sich statische Klassen von inneren Klassen unterscheiden.
Wie in früheren Tutorials gelernt, können wir in Java eine Klasse innerhalb einer anderen Klasse haben. Solche Klassen werden als verschachtelte Klassen bezeichnet. In Java gibt es zwei Arten von verschachtelten Klassen:
- Verschachtelte nichtstatische Klasse (innere Klasse)
- Verschachtelte statische Klasse.
Wir haben innere Klassen bereits im vorherigen Tutorial besprochen. Besuchen Sie Java Nested Class, wenn Sie mehr über innere Klassen erfahren möchten.
In diesem Tutorial lernen wir verschachtelte statische Klassen kennen.
Java verschachtelte statische Klasse
Wir verwenden das Schlüsselwort static
um unsere verschachtelte Klasse statisch zu machen.
Hinweis: In Java dürfen nur verschachtelte Klassen statisch sein.
Wie normale Klassen können statische verschachtelte Klassen sowohl statische als auch nicht statische Felder und Methoden enthalten. Zum Beispiel
Class Animal {
static class Mammal {
// static and non-static members of Mammal
}
// members of Animal
}
Statische verschachtelte Klassen sind der äußeren Klasse zugeordnet.
Um auf die statisch verschachtelte Klasse zuzugreifen, benötigen wir keine Objekte der äußeren Klasse.
Beispiel:Statisch verschachtelte Klasse
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();
}
}
Ausgabe
I am a reptile. I am a mammal.
Im obigen Programm haben wir zwei verschachtelte Klassen Mammal und Reptil innerhalb einer Klasse Animal .
Um ein Objekt der nicht statischen Klasse Reptile zu erstellen, haben wir
verwendet
Animal.Reptile reptile = animal.new Reptile()
Um ein Objekt der statischen Klasse Mammal zu erstellen , haben wir verwendet
Animal.Mammal mammal = new Animal.Mammal()
Zugriff auf Mitglieder der äußeren Klasse
In Java werden statische verschachtelte Klassen mit der äußeren Klasse verknüpft. Aus diesem Grund können statisch verschachtelte Klassen nur auf die Klassenmitglieder (statische Felder und Methoden) der äußeren Klasse zugreifen.
Mal sehen, was passiert, wenn wir versuchen, auf nicht statische Felder und Methoden der äußeren Klasse zuzugreifen.
Beispiel:Zugriff auf nicht statische Mitglieder
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();
}
}
Ausgabe
Main.java:28: error: cannot find symbol mammal.eat(); ^ symbol: method eat() location: variable mammal of type Mammal 1 error compiler exit status 1
Im obigen Beispiel haben wir eine nicht statische Methode eat()
erstellt innerhalb der Klasse Animal .
Wenn wir nun versuchen, auf eat()
zuzugreifen mit dem Objekt mammal , zeigt der Compiler einen Fehler an.
Es ist, weil Säugetier ist ein Objekt einer statischen Klasse und wir können nicht auf nicht-statische Methoden von statischen Klassen zugreifen.
Statische Top-Level-Klasse
Wie oben erwähnt, können nur verschachtelte Klassen statisch sein. Wir können keine statischen Top-Level-Klassen haben.
Mal sehen, was passiert, wenn wir versuchen, eine Top-Level-Klasse statisch zu machen.
static class Animal {
public static void displayInfo() {
System.out.println("I am an animal");
}
}
class Main {
public static void main(String[] args) {
Animal.displayInfo();
}
}
Ausgabe
Main.java:1: error: modifier static not allowed here static class Animal { ^ 1 error compiler exit status 1
Im obigen Beispiel haben wir versucht, eine statische Klasse Tier zu erstellen . Da Java keine statische Top-Level-Klasse zulässt, erhalten wir eine Fehlermeldung.
Java