Java nestet statisk klasse

I denne opplæringen lærer du om nestet statisk klasse ved hjelp av eksempler. Du vil også lære om hvordan statiske klasser skiller seg fra indre klasser.

Som vi har lært i tidligere veiledninger, kan vi ha en klasse i en annen klasse i Java. Slike klasser er kjent som nestede klasser. I Java er nestede klasser av to typer:

  • Nestet ikke-statisk klasse (indre klasse)
  • Nestet statisk klasse.

Vi har allerede diskutert indre klasser i forrige opplæring. Besøk Java Nested Class hvis du vil lære om indre klasser.

I denne veiledningen vil vi lære om nestede statiske klasser.

Java nestet statisk klasse

Vi bruker nøkkelordet for staticå gjøre vår nestede klasse statisk.

Merk: I Java er det bare nestede klasser som kan være statiske.

Som vanlige klasser, kan statiske nestede klasser inneholde både statiske og ikke-statiske felt og metoder. For eksempel,

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

Statisk nestede klasser er knyttet til den ytre klassen.

For å få tilgang til den statiske nestede klassen trenger vi ikke objekter av den ytre klassen.

Eksempel: Statisk nestet 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(); ) ) 

Produksjon

Jeg er et reptil. Jeg er et pattedyr.

I programmet ovenfor har vi to nestede klasser Pattedyr og Reptil inne i en klasse Dyr.

For å lage et objekt av den ikke-statiske klassen Reptile, har vi brukt

 Animal.Reptile reptile = animal.new Reptile() 

For å lage et objekt av den statiske klassen Pattedyr, har vi brukt

 Animal.Mammal mammal = new Animal.Mammal() 

Tilgang til medlemmer av ytre klasse

I Java er statiske nestede klasser assosiert med den ytre klassen. Dette er grunnen til at statiske nestede klasser bare har tilgang til klassemedlemmene (statiske felt og metoder) i den ytre klassen.

La oss se hva som vil skje hvis vi prøver å få tilgang til ikke-statiske felt og metoder i den ytre klassen.

Eksempel: Få tilgang til ikke-statiske medlemmer

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

Produksjon

Main.java:28: feil: finner ikke symbol mammal.eat (); symbol: metode spise () plassering: variabelt pattedyr av typen Pattedyr 1 feil kompilator utgangsstatus 1

I eksemplet ovenfor har vi laget en ikke-statisk metode eat()inne i klassen Animal.

Nå, hvis vi prøver å få tilgang til eat()ved hjelp av objektet pattedyr, viser kompilatoren en feil.

Det er fordi pattedyr er et objekt i en statisk klasse, og vi kan ikke få tilgang til ikke-statiske metoder fra statiske klasser.

Statisk toppnivåklasse

Som nevnt ovenfor kan bare nestede klasser være statiske. Vi kan ikke ha statiske toppklasser.

La oss se hva som vil skje hvis vi prøver å lage en klassestatus på toppnivå.

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

Produksjon

 Main.java:1: feil: modifikator statisk ikke tillatt her statisk klasse Animal (1 feil kompilator utgangsstatus 1 

I eksemplet ovenfor har vi prøvd å lage en statisk klasse Animal. Siden Java ikke tillater statisk toppnivåklasse, får vi en feil.

Interessante artikler...