Java geneste statische klasse

In deze tutorial leer je met behulp van voorbeelden over geneste statische klassen. Je leert ook hoe statische klassen verschillen van innerlijke klassen.

Zoals we in eerdere tutorials hebben geleerd, kunnen we een klas hebben in een andere klas in Java. Dergelijke klassen staan ​​bekend als geneste klassen. In Java zijn er twee soorten geneste klassen:

  • Geneste niet-statische klasse (innerlijke klasse)
  • Geneste statische klasse.

We hebben innerlijke klassen al besproken in de vorige tutorial. Bezoek Java Nested Class als je meer wilt weten over innerlijke klassen.

In deze zelfstudie leren we geneste statische klassen.

Java geneste statische klasse

We gebruiken het sleutelwoord staticom onze geneste klasse statisch te maken.

Opmerking: in Java mogen alleen geneste klassen statisch zijn.

Net als gewone klassen kunnen statisch geneste klassen zowel statische als niet-statische velden en methoden bevatten. Bijvoorbeeld,

 Class Animal ( static class Mammal ( // static and non-static members of Mammal ) // members of Animal ) 

Statische geneste klassen zijn gekoppeld aan de buitenste klasse.

Om toegang te krijgen tot de statische geneste klasse, hebben we geen objecten van de buitenste klasse nodig.

Voorbeeld: statische geneste 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(); ) ) 

Uitvoer

Ik ben een reptiel. Ik ben een zoogdier.

In het bovenstaande programma hebben we twee geneste klassen Zoogdier en Reptiel in een klasse Dier.

Om een ​​object van de niet-statische klasse Reptile te maken, hebben we gebruikt

 Animal.Reptile reptile = animal.new Reptile() 

Om een ​​object van de statische klasse Mammal te maken, hebben we gebruikt

 Animal.Mammal mammal = new Animal.Mammal() 

Toegang tot leden van Outer Class

In Java worden statisch geneste klassen geassocieerd met de buitenste klasse. Dit is de reden waarom statisch geneste klassen alleen toegang hebben tot de klasleden (statische velden en methoden) van de buitenste klasse.

Laten we eens kijken wat er gebeurt als we proberen toegang te krijgen tot niet-statische velden en methoden van de buitenste klasse.

Voorbeeld: toegang tot niet-statische leden

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

Uitvoer

Main.java:28: error: kan symbool zoogdier.eat () niet vinden; symbol: method eat () location: variabel zoogdier van het type Mammal 1 error compiler exit status 1

In het bovenstaande voorbeeld hebben we een niet-statische methode gemaakt eat()binnen de klasse Animal.

Als we nu proberen toegang te krijgen eat()met behulp van het objectzoogdier, toont de compiler een fout.

Het is omdat zoogdier een object is van een statische klasse en we geen toegang hebben tot niet-statische methoden van statische klassen.

Statische klasse op het hoogste niveau

Zoals hierboven vermeld, kunnen alleen geneste klassen statisch zijn. We kunnen geen statische klassen op het hoogste niveau hebben.

Laten we eens kijken wat er gebeurt als we proberen een klasse op het hoogste niveau statisch te maken.

 static class Animal ( public static void displayInfo() ( System.out.println("I am an animal"); ) ) class Main ( public static void main(String() args) ( Animal.displayInfo(); ) ) 

Uitvoer

 Main.java:1: error: modifier static hier niet toegestaan ​​static class Animal (1 error compiler exit status 1 

In het bovenstaande voorbeeld hebben we geprobeerd een statische klasse Animal te maken. Omdat Java geen statische klasse op het hoogste niveau toestaat, krijgen we een foutmelding.

Interessante artikelen...