Java ugniježđena statička klasa

U ovom ćete tutorijalu uz primjere naučiti o ugniježđenoj statičkoj klasi. Također ćete naučiti kako se statične klase razlikuju od unutarnjih klasa.

Kao što smo naučili u prethodnim tutorijalima, možemo imati nastavu unutar druge klase na Javi. Takve su klase poznate kao ugniježđene klase. U Javi su ugniježđene klase dvije vrste:

  • Ugnježđena nestatična klasa (Unutarnja klasa)
  • Ugnježđena statička klasa.

Već smo razgovarali o unutarnjim klasama u prethodnom tutorialu. Posjetite Javu gniježdeni razred ako želite naučiti o unutarnjim klasama.

U ovom uputstvu naučit ćemo o ugniježđenim statičkim klasama.

Java ugniježđena statička klasa

Koristimo ključnu riječ staticda bismo svoju ugniježđenu klasu učinili statičnom.

Napomena: U Javi smiju biti statične samo ugniježđene klase.

Poput redovnih klasa, statične ugniježđene klase mogu uključivati ​​i statička i nestetička polja i metode. Na primjer,

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

Statične ugniježđene klase povezane su s vanjskom klasom.

Da bismo pristupili statičnoj ugniježđenoj klasi, ne trebaju nam objekti vanjske klase.

Primjer: Statična ugniježđena klasa

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

Izlaz

Ja sam gmaz. Ja sam sisavac.

U gore navedenom programu imamo dvije ugniježđene klase Sisavci i Reptili unutar klase Životinja.

Koristili smo za stvaranje objekta nestatične klase Reptile

 Animal.Reptile reptile = animal.new Reptile() 

Koristili smo za stvaranje objekta statičke klase Sisavci

 Animal.Mammal mammal = new Animal.Mammal() 

Pristup pripadnicima vanjske klase

U Javi su statičke ugniježđene klase povezane s vanjskom klasom. Zbog toga statične ugniježđene klase mogu pristupiti samo članovima klase (statička polja i metode) vanjske klase.

Pogledajmo što će se dogoditi ako pokušamo pristupiti ne-statičkim poljima i metodama vanjske klase.

Primjer: Pristup nestatičnim članovima

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

Izlaz

Main.java:28: pogreška: ne mogu pronaći simbol mammal.eat (); simbol: metoda eat () mjesto: varijabilni sisavac tipa Sisavac 1, izlazni status sastavljača pogrešaka 1

U gornjem primjeru stvorili smo nestatičnu metodu eat()unutar klase Animal.

Sada, ako pokušamo pristupiti eat()pomoću objekta sisavac, sastavljač pokazuje pogrešku.

To je zato što je sisavac objekt statičke klase i iz statičkih klasa ne možemo pristupiti ne-statičkim metodama.

Statička klasa najviše razine

Kao što je gore spomenuto, samo ugniježđene klase mogu biti statične. Ne možemo imati statičke klase najviše razine.

Pogledajmo što će se dogoditi ako pokušamo učiniti klasu najviše razine statičnom.

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

Izlaz

 Main.java:1: pogreška: statički modifikator ovdje nije dopušten statička klasa Animal (1 izlazni status kompajlera pogrešaka 1 

U gornjem primjeru pokušali smo stvoriti statičku klasu Animal. Budući da Java ne dopušta statičku klasu najviše razine, dobit ćemo pogrešku.

Zanimljivi članci...