Java nestet statisk klasse

I denne vejledning lærer du om indlejret statisk klasse ved hjælp af eksempler. Du vil også lære om, hvordan statiske klasser adskiller sig fra indre klasser.

Som vi lærte i tidligere tutorials, kan vi have en klasse inde i en anden klasse i Java. Sådanne klasser er kendt som indlejrede klasser. I Java er indlejrede klasser af to typer:

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

Vi har allerede diskuteret indre klasser i den foregående vejledning. Besøg Java Nested Class, hvis du vil lære om indre klasser.

I denne vejledning lærer vi om indlejrede statiske klasser.

Java nestet statisk klasse

Vi bruger nøgleordet statictil at gøre vores indlejrede klasse statisk.

Bemærk: I Java må kun indlejrede klasser være statiske.

Ligesom almindelige klasser kan statiske nestede klasser omfatte både statiske og ikke-statiske felter og metoder. For eksempel,

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

Statisk indlejrede klasser er forbundet med den ydre klasse.

For at få adgang til den statiske indlejrede klasse har vi ikke brug for objekter af den ydre klasse.

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

Produktion

Jeg er et krybdyr. Jeg er et pattedyr.

I ovenstående program har vi to indlejrede klasse Pattedyr og Reptiler inde i en klasse Dyr.

For at oprette et objekt af den ikke-statiske klasse Reptil har vi brugt

 Animal.Reptile reptile = animal.new Reptile() 

For at skabe et objekt af den statiske klasse Pattedyr, har vi brugt

 Animal.Mammal mammal = new Animal.Mammal() 

Adgang til medlemmer af ydre klasse

I Java er statiske indlejrede klasser forbundet med den ydre klasse. Dette er grunden til, at statiske indlejrede klasser kun har adgang til klassemedlemmerne (statiske felter og metoder) i den ydre klasse.

Lad os se, hvad der vil ske, hvis vi forsøger at få adgang til ikke-statiske felter og metoder i den ydre klasse.

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

Produktion

Main.java:28: fejl: kan ikke finde symbol mammal.eat (); symbol: metode spise () placering: variabel pattedyr af typen Pattedyr 1 fejl kompilator udgangsstatus 1

I eksemplet ovenfor har vi oprettet en ikke-statisk metode eat()inden for klassen Dyr.

Nu, hvis vi forsøger at få adgang eat()med objektet pattedyr, viser compileren en fejl.

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

Statisk topklasse

Som nævnt ovenfor kan kun indlejrede klasser være statiske. Vi kan ikke have statiske topklasser.

Lad os se, hvad der vil ske, hvis vi prøver at lave en topklasse statisk.

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

Produktion

 Main.java:1: fejl: statisk modifikator er ikke tilladt her statisk klasse Animal (1 error compiler exit status 1 

I eksemplet ovenfor har vi forsøgt at oprette en statisk klasse Animal. Da Java ikke tillader statisk topklasse, får vi en fejl.

Interessante artikler...