Java kapslad statisk klass

I den här handledningen lär du dig om kapslad statisk klass med hjälp av exempel. Du lär dig också om hur statiska klasser skiljer sig från inre klasser.

Som vi lärde oss i tidigare självstudier kan vi ha en klass i en annan klass i Java. Sådana klasser är kända som kapslade klasser. I Java är kapslade klasser av två typer:

  • Kapslad icke-statisk klass (Inre klass)
  • Kapslad statisk klass.

Vi har redan diskuterat inre klasser i föregående handledning. Besök Java Nested Class om du vill lära dig mer om inre klasser.

I denna handledning lär vi oss om kapslade statiska klasser.

Java kapslad statisk klass

Vi använder nyckelordet för staticatt göra vår kapslade klass statisk.

Obs! I Java får endast kapslade klasser vara statiska.

Liksom vanliga klasser kan statiska kapslade klasser innehålla både statiska och icke-statiska fält och metoder. Till exempel,

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

Statiska kapslade klasser är associerade med den yttre klassen.

För att komma åt den statiska kapslade klassen behöver vi inte objekt av den yttre klassen.

Exempel: Statisk kapslad klass

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

Produktion

Jag är ett reptil. Jag är ett däggdjur.

I ovanstående program har vi två kapslade klasser däggdjur och reptiler i en klass Djur.

För att skapa ett objekt av den icke-statiska klassen Reptil har vi använt

 Animal.Reptile reptile = animal.new Reptile() 

För att skapa ett objekt av den statiska klassen Däggdjur har vi använt

 Animal.Mammal mammal = new Animal.Mammal() 

Åtkomst till medlemmar i yttre klass

I Java är statiska kapslade klasser associerade med den yttre klassen. Det är därför statiska kapslade klasser endast kan komma åt klassmedlemmarna (statiska fält och metoder) för den yttre klassen.

Låt oss se vad som kommer att hända om vi försöker komma åt icke-statiska fält och metoder för den yttre klassen.

Exempel: Åtkomst till icke-statiska medlemmar

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

Produktion

Main.java:28: fel: kan inte hitta symbol däggdjur.eat (); symbol: metod äta () plats: variabelt däggdjur av typen Mammal 1 fel kompilator utgångsstatus 1

I exemplet ovan har vi skapat en icke-statisk metod eat()inuti klassen Animal.

Nu, om vi försöker komma åt eat()med objektet däggdjur, visar kompilatorn ett fel.

Det beror på att däggdjur är ett objekt i en statisk klass och att vi inte kan komma åt icke-statiska metoder från statiska klasser.

Statisk toppnivåklass

Som nämnts ovan kan endast kapslade klasser vara statiska. Vi kan inte ha statiska toppklasser.

Låt oss se vad som kommer att hända om vi försöker göra en toppklassstatik.

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

Produktion

 Main.java:1: fel: statisk modifierare tillåts inte här statisk klass Animal (1 fel kompilatorns utgångsstatus 1 

I exemplet ovan har vi försökt skapa en statisk klass Animal. Eftersom Java inte tillåter statisk toppklass får vi ett fel.

Intressanta artiklar...