Java sisäkkäin staattinen luokka

Tässä opetusohjelmassa opit sisäkkäisistä staattisista luokista esimerkkien avulla. Opit myös siitä, kuinka staattiset luokat eroavat sisäisistä luokista.

Kuten edellisistä opetusohjelmista on opittu, meillä voi olla luokka toisen Java-luokan sisällä. Tällaisia ​​luokkia kutsutaan sisäkkäisiksi luokiksi. Java-tilassa sisäkkäisiä luokkia on kahta tyyppiä:

  • Sisäkkäinen ei-staattinen luokka (sisempi luokka)
  • Sisäkkäinen staattinen luokka.

Olemme jo keskustelleet sisäisistä luokista edellisessä opetusohjelmassa. Käy Java Nested -luokassa, jos haluat oppia sisäisistä luokista.

Tässä opetusohjelmassa opitaan sisäkkäisistä staattisista luokista.

Java sisäkkäin staattinen luokka

Teemme avainsanalla staticsisäkkäisen luokan staattiseksi.

Huomaa: Javassa vain sisäkkäiset luokat ovat staattisia.

Tavallisten luokkien tavoin staattiset sisäkkäiset luokat voivat sisältää sekä staattisia että ei-staattisia kenttiä ja menetelmiä. Esimerkiksi,

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

Staattiset sisäkkäiset luokat liittyvät ulompaan luokkaan.

Staattisen sisäkkäisen luokan käyttämiseksi emme tarvitse ulomman luokan esineitä.

Esimerkki: Staattinen sisäkkäinen luokka

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

Tuotos

Olen matelija. Olen nisäkäs.

Yllä olevassa ohjelmassa meillä on kaksi sisäkkäistä luokan nisäkäs ja matelija luokan eläin sisällä.

Olemme luoneet ei-staattisen luokan matelija objektin

 Animal.Reptile reptile = animal.new Reptile() 

Olemme luoneet staattisen luokan Nisäkäs objektin

 Animal.Mammal mammal = new Animal.Mammal() 

Pääsy ulkoluokan jäseniin

Java-tilassa staattiset sisäkkäiset luokat liitetään ulompaan luokkaan. Siksi staattiset sisäkkäiset luokat voivat käyttää vain ulomman luokan luokan jäseniä (staattiset kentät ja menetelmät).

Katsotaanpa, mitä tapahtuu, jos yritämme käyttää ei-staattisia kenttiä ja ulomman luokan menetelmiä.

Esimerkki: Ei-staattisten jäsenten käyttö

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

Tuotos

Main.java:28: virhe: ei löydy symbolia mammal.eat (); symboli: menetelmä syö () sijainti: vaihteleva nisäkäs tyyppiä Nisäkäs 1 -virheen kääntäjän poistumistila 1

Yllä olevassa esimerkissä olemme luoneet ei-staattisen menetelmän eat()Animal-luokkaan.

Jos yritämme nyt käyttää eat()objektinisäkkäitä, kääntäjä näyttää virheen.

Se johtuu siitä, että nisäkäs on staattisen luokan kohde, emmekä voi käyttää ei-staattisia menetelmiä staattisista luokista.

Staattinen ylätason luokka

Kuten edellä mainittiin, vain sisäkkäiset luokat voivat olla staattisia. Meillä ei voi olla staattisia ylätason luokkia.

Katsotaanpa, mitä tapahtuu, jos yritämme tehdä huipputason staattisen.

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

Tuotos

 Main.java:1: virhe: staattinen muokkaaja ei ole sallittu tässä staattinen luokka Animal (1 virheen kääntäjän poistumistila 1 

Yllä olevassa esimerkissä olemme yrittäneet luoda staattisen luokan eläin. Koska Java ei salli staattista ylätason luokkaa, saamme virheen.

Mielenkiintoisia artikkeleita...