Java ugnezdeni statični razred

V tej vadnici boste s pomočjo primerov spoznali ugnezdeni statični razred. Spoznali boste tudi, kako se statični razredi razlikujejo od notranjih.

Kot smo se naučili v prejšnjih vajah, imamo lahko razred v drugem razredu v Javi. Takšni razredi so znani kot ugnezdeni razredi. V Javi so ugnezdeni razredi dveh vrst:

  • Vgnezdeni nestatični razred (notranji razred)
  • Vgnezdeni statični razred.

V prejšnji vadnici smo že razpravljali o notranjih tečajih. Če želite izvedeti več o notranjih razredih, obiščite Java Nested Class.

V tej vadnici bomo spoznali ugnezdene statične razrede.

Java ugnezdeni statični razred

Ključno besedo uporabljamo staticza izdelavo ugnezdenega razreda statično.

Opomba: V Javi smejo biti samo ugnezdeni razredi statični.

Tako kot običajni razredi lahko tudi statični ugnezdeni razredi vključujejo tako statična kot nestatična polja in metode. Na primer

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

Statični ugnezdeni razredi so povezani z zunanjim razredom.

Za dostop do statičnega ugnezdenega razreda ne potrebujemo predmetov zunanjega razreda.

Primer: Statični ugnezdeni razred

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

Izhod

Jaz sem plazilec. Sem sesalec.

V zgornjem programu imamo v razredu Animal dva ugnezdena razreda Sesalci in Plazilci.

Za ustvarjanje predmeta nestatičnega razreda Reptile smo uporabili

 Animal.Reptile reptile = animal.new Reptile() 

Za izdelavo predmeta statičnega razreda Sesalci smo uporabili

 Animal.Mammal mammal = new Animal.Mammal() 

Dostop do članov zunanjega razreda

V Javi so statični ugnezdeni razredi povezani z zunanjim razredom. Zato lahko statični ugnezdeni razredi dostopajo samo do članov razreda (statična polja in metode) zunanjega razreda.

Poglejmo, kaj se bo zgodilo, če bomo poskušali dostopati do nestatičnih polj in metod zunanjega razreda.

Primer: Dostop do nestatičnih članov

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

Izhod

Main.java:28: napaka: ni mogoče najti simbola mammal.eat (); simbol: metoda eat () lokacija: spremenljiv sesalec tipa Sesalci 1 stanje izstopa prevajalnika napak 1

V zgornjem primeru smo eat()znotraj razreda Animal ustvarili nestatično metodo .

Če poskusimo dostopiti eat()s pomočjo predmeta sesalec, prevajalnik pokaže napako.

To je zato, ker je sesalec predmet statičnega razreda in iz statičnih razredov ne moremo dostopati do nestatičnih metod.

Statični razred najvišje ravni

Kot smo že omenili, so lahko statični samo ugnezdeni razredi. Ne moremo imeti statičnih razredov na najvišji ravni.

Poglejmo, kaj se bo zgodilo, če poskusimo narediti razred najvišje ravni statičen.

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

Izhod

 Main.java:1: napaka: statični modifikator tukaj ni dovoljen statični razred Animal (1 stanje izstopa prevajalnika napak 1 

V zgornjem primeru smo poskušali ustvariti statični razred Animal. Ker Java ne dovoljuje statičnega razreda najvišje ravni, bomo dobili napako.

Zanimive Članki...