Java ligzdota statiskā klase

Šajā apmācībā jūs uzzināsit par ligzdotu statisko klasi, izmantojot piemērus. Jūs arī uzzināsiet par to, kā statiskās klases atšķiras no iekšējām.

Kā uzzināts iepriekšējās apmācībās, mums var būt klase iekš citas Java klases. Šādas klases ir pazīstamas kā ligzdotas klases. Java ligzdotās klases ir divu veidu:

  • Ligzdota nestatiska klase (iekšējā klase)
  • Ligzdota statiskā klase.

Iekšējās klases mēs jau esam apsprieduši iepriekšējā apmācībā. Apmeklējiet Java Nested klasi, ja vēlaties uzzināt par iekšējām klasēm.

Šajā apmācībā mēs uzzināsim par ligzdotām statiskām klasēm.

Java ligzdota statiskā klase

Mēs izmantojam atslēgvārdu static, lai mūsu ligzdotā klase būtu statiska.

Piezīme: Java valodā statiskas ir atļautas tikai ligzdotās klases.

Tāpat kā parastās klases, arī statiskās ligzdotās klases var ietvert gan statiskos, gan nemestiskos laukus un metodes. Piemēram,

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

Statiskās ligzdotās klases ir saistītas ar ārējo klasi.

Lai piekļūtu statiskajai ligzdotajai klasei, mums nav nepieciešami ārējās klases objekti.

Piemērs: statiskā ligzdotā klase

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

Rezultāts

Es esmu rāpulis. Es esmu zīdītājs.

Iepriekš minētajā programmā dzīvniekam ir divi ligzdoti klases zīdītāji un rāpuļi.

Lai izveidotu non-statiskās klases Rāpuļu objektu, mēs to izmantojām

 Animal.Reptile reptile = animal.new Reptile() 

Lai izveidotu zīdītāju statiskās klases objektu, mēs to izmantojām

 Animal.Mammal mammal = new Animal.Mammal() 

Piekļuve ārējās klases dalībniekiem

Java statiskās ligzdotās klases ir saistītas ar ārējo klasi. Tāpēc statiskās ligzdotās klases var piekļūt tikai ārējās klases klases dalībniekiem (statiskajiem laukiem un metodēm).

Apskatīsim, kas notiks, ja mēģināsim piekļūt ārējās klases nestatiskajiem laukiem un metodēm.

Piemērs: Piekļuve dalībniekiem, kas nav statiski

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

Rezultāts

Main.java:28: kļūda: nevar atrast simbolu mammal.eat (); simbols: metode ēst () atrašanās vieta: zīdītāja 1. tipa mainīgais zīdītājs kļūdas sastādītāja 1. izejas statuss

Iepriekš minētajā piemērā mēs esam izveidojuši non-static metodi eat()Dzīvnieku klasē.

Tagad, ja mēs mēģinām piekļūt, eat()izmantojot objekta zīdītāju, kompilators parāda kļūdu.

Tas ir tāpēc, ka zīdītājs ir statiskās klases objekts, un mēs nevaram piekļūt nestatiskām metodēm no statiskām klasēm.

Statiskā augstākā līmeņa klase

Kā minēts iepriekš, tikai ligzdotas klases var būt statiskas. Mums nevar būt statiskas augstākā līmeņa klases.

Paskatīsimies, kas notiks, ja mēģināsim izveidot augstākā līmeņa klasi statisku.

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

Rezultāts

 Main.java:1: kļūda: statisks modifikators šeit nav atļauts statiskā klase Animal (1 kļūda kompilatora izejas statuss 1 

Iepriekš minētajā piemērā mēs esam mēģinājuši izveidot statisko klasi Dzīvnieks. Tā kā Java neatļauj statisku augstākā līmeņa klasi, mēs saņemsim kļūdu.

Interesanti raksti...