Classe statica annidata Java

In questo tutorial imparerai a conoscere la classe statica annidata con l'aiuto di esempi. Imparerai anche come le classi statiche differiscono dalle classi interne.

Come appreso nei tutorial precedenti, possiamo avere una classe all'interno di un'altra classe in Java. Tali classi sono note come classi annidate. In Java, le classi nidificate sono di due tipi:

  • Classe non statica annidata (classe interna)
  • Classe statica annidata.

Abbiamo già discusso delle classi interne nel tutorial precedente. Visita Java Nested Class se vuoi conoscere le classi interne.

In questo tutorial impareremo a conoscere le classi statiche annidate.

Classe statica annidata Java

Usiamo la parola chiave staticper rendere statica la nostra classe annidata.

Nota: in Java, solo le classi nidificate possono essere statiche.

Come le classi normali, le classi annidate statiche possono includere campi e metodi sia statici che non statici. Per esempio,

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

Le classi nidificate statiche sono associate alla classe esterna.

Per accedere alla classe annidata statica, non abbiamo bisogno di oggetti della classe esterna.

Esempio: classe annidata statica

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

Produzione

Sono un rettile. Sono un mammifero.

Nel programma sopra, abbiamo due classi Mammal e Reptile annidate all'interno di una classe Animal.

Per creare un oggetto della classe non statica Reptile, abbiamo utilizzato

 Animal.Reptile reptile = animal.new Reptile() 

Per creare un oggetto della classe statica Mammal, abbiamo utilizzato

 Animal.Mammal mammal = new Animal.Mammal() 

Accesso ai membri della classe esterna

In Java, le classi annidate statiche sono associate alla classe esterna. Questo è il motivo per cui le classi annidate statiche possono accedere solo ai membri della classe (campi e metodi statici) della classe esterna.

Vediamo cosa succederà se proviamo ad accedere a campi e metodi non statici della classe esterna.

Esempio: accesso a membri non statici

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

Produzione

Main.java:28: errore: impossibile trovare il simbolo Mammal.eat (); simbolo: metodo eat () posizione: variabile mammifero di tipo Mammifero 1 errore stato di uscita del compilatore 1

Nell'esempio sopra, abbiamo creato un metodo non statico eat()all'interno della classe Animal.

Ora, se proviamo ad accedere eat()utilizzando l'oggetto mammifero, il compilatore mostra un errore.

È perché il mammifero è un oggetto di una classe statica e non possiamo accedere a metodi non statici da classi statiche.

Classe statica di primo livello

Come accennato in precedenza, solo le classi annidate possono essere statiche. Non possiamo avere classi statiche di primo livello.

Vediamo cosa succederà se proviamo a rendere statica una classe di primo livello.

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

Produzione

 Main.java:1: errore: modificatore statico non consentito qui classe statica Animal (1 errore stato di uscita del compilatore 1 

Nell'esempio sopra, abbiamo provato a creare una classe statica Animal. Poiché Java non consente la classe statica di primo livello, verrà visualizzato un errore.

Articoli interessanti...