Vnorená statická trieda Java

V tomto výučbe sa pomocou príkladov dozviete o vnorenej statickej triede. Dozviete sa tiež, ako sa statické triedy líšia od vnútorných tried.

Ako sme sa dozvedeli v predchádzajúcich tutoriáloch, v Jave môžeme mať triedu v inej triede. Takéto triedy sú známe ako vnorené triedy. V Jave sú vnorené triedy dvoch typov:

  • Vnorená nestatická trieda (vnútorná trieda)
  • Vnorená statická trieda.

O vnútorných triedach sme už hovorili v predchádzajúcom tutoriáli. Navštívte triedu Java Nested Class, ak sa chcete dozvedieť viac o vnútorných triedach.

V tomto výučbe sa dozvieme o vnorených statických triedach.

Vnorená statická trieda Java

Kľúčové slovo používame na to, staticaby bola naša vnorená trieda statická.

Poznámka: V prostredí Java môžu byť statické iba vnorené triedy.

Rovnako ako bežné triedy, aj statické vnorené triedy môžu obsahovať statické aj nestatické polia a metódy. Napríklad,

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

Statické vnorené triedy sú spojené s vonkajšou triedou.

Na prístup k statickej vnorenej triede nepotrebujeme objekty vonkajšej triedy.

Príklad: statická vnorená trieda

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

Výkon

Ja som plaz. Som cicavec.

Vo vyššie uvedenom programe máme dve vnorené triedy Cicavce a Plazy vnútri triedy Zviera.

Na vytvorenie objektu nestatickej triedy Reptile sme použili

 Animal.Reptile reptile = animal.new Reptile() 

Na vytvorenie objektu statickej triedy Cicavec sme použili

 Animal.Mammal mammal = new Animal.Mammal() 

Prístup k členom vonkajšej triedy

V Jave sú statické vnorené triedy spojené s vonkajšou triedou. To je dôvod, prečo majú vnorené statické triedy prístup iba k členom triedy (statické polia a metódy) vonkajšej triedy.

Pozrime sa, čo sa stane, ak sa pokúsime získať prístup k nestatickým poliam a metódam vonkajšej triedy.

Príklad: Prístup k nestatickým členom

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

Výkon

Main.java:28: chyba: nemožno nájsť symbol savec.eat (); symbol: metóda eat () umiestnenie: variabilný cicavec typu Mammal 1 stav ukončenia kompilátora chýb 1

Vo vyššie uvedenom príklade sme vytvorili nestatickú metódu eat()vo vnútri triedy Animal.

Teraz, ak sa pokúsime získať prístup eat()pomocou objektu cicavec, kompilátor zobrazí chybu.

Je to preto, lebo cicavec je predmetom statickej triedy a zo statických tried nemôžeme získať prístup k nestatickým metódam.

Statická trieda najvyššej úrovne

Ako už bolo spomenuté vyššie, statické môžu byť iba vnorené triedy. Nemôžeme mať statické triedy najvyššej úrovne.

Pozrime sa, čo sa stane, ak sa pokúsime statickú triedu najvyššej úrovne.

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

Výkon

 Main.java:1: chyba: statický modifikátor tu nie je povolený statická trieda Zviera (stav ukončenia kompilátora 1 chýb 1 

Vo vyššie uvedenom príklade sme sa pokúsili vytvoriť statickú triedu Animal. Pretože Java nepovoľuje statickú triedu najvyššej úrovne, zobrazí sa chyba.

Zaujímavé články...