Vnořená statická třída Java

V tomto kurzu se naučíte o vnořené statické třídě pomocí příkladů. Dozvíte se také, jak se statické třídy liší od vnitřních tříd.

Jak jsme se dozvěděli v předchozích tutoriálech, můžeme mít třídu uvnitř jiné třídy v Javě. Takové třídy jsou známé jako vnořené třídy. V Javě jsou vnořené třídy dvou typů:

  • Vnořená nestatická třída (vnitřní třída)
  • Vnořená statická třída.

O vnitřních třídách jsme již hovořili v předchozím kurzu. Navštivte Java Nested Class, pokud se chcete dozvědět více o vnitřních třídách.

V tomto kurzu se dozvíme o vnořených statických třídách.

Vnořená statická třída Java

Klíčové slovo používáme k statictomu, aby naše vnořená třída byla statická.

Poznámka: V Javě mohou být statické pouze vnořené třídy.

Stejně jako běžné třídy mohou statické vnořené třídy zahrnovat jak statická, tak nestatická pole a metody. Například,

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

Statické vnořené třídy jsou přidruženy k vnější třídě.

Pro přístup ke statické vnořené třídě nepotřebujeme objekty vnější třídy.

Příklad: Statická vnořená třída

 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ýstup

Jsem plaz. Jsem savec.

Ve výše uvedeném programu máme dvě vnořené třídy Mammal a Reptile uvnitř třídy Animal.

K vytvoření objektu nestatické třídy Reptile jsme použili

 Animal.Reptile reptile = animal.new Reptile() 

K vytvoření objektu statické třídy Savec jsme použili

 Animal.Mammal mammal = new Animal.Mammal() 

Přístup k členům vnější třídy

V Javě jsou statické vnořené třídy přidruženy k vnější třídě. To je důvod, proč statické vnořené třídy mají přístup pouze k členům třídy (statická pole a metody) vnější třídy.

Podívejme se, co se stane, když se pokusíme získat přístup k nestatickým polím a metodám vnější třídy.

Příklad: Přístup k nestatickým členům

 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ýstup

Main.java:28: chyba: nelze najít symbol savec.eat (); symbol: metoda eat () umístění: variabilní savec typu Savec 1 stav ukončení kompilátoru chyb 1

Ve výše uvedeném příkladu jsme vytvořili nestatickou metodu eat()uvnitř třídy Animal.

Nyní, když se pokusíme o přístup eat()pomocí objektu savec, kompilátor zobrazí chybu.

Je to proto, že savec je objektem statické třídy a ze statických tříd nemůžeme přistupovat k nestatickým metodám.

Statická třída nejvyšší úrovně

Jak bylo uvedeno výše, statické mohou být pouze vnořené třídy. Nemůžeme mít statické třídy nejvyšší úrovně.

Podívejme se, co se stane, když se pokusíme statickou třídu nejvyšší úrovně.

 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ýstup

 Main.java:1: chyba: statický modifikátor zde není povolen statická třída Zvíře (stav ukončení kompilátoru 1 chyb 1 

Ve výše uvedeném příkladu jsme se pokusili vytvořit statickou třídu Animal. Protože Java nepovoluje statickou třídu nejvyšší úrovně, zobrazí se chyba.

Zajímavé články...