English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai le classi statiche annidate con esempi. Imparerai anche la differenza tra classi statiche e interne.
Come descritto nei tutorial precedenti, possiamo avere una classe in un altro oggetto Java. Questo tipo di classe si chiama classe annidata. In Java, ci sono due tipi di classi annidate:
Classi non statiche annidate (classi interne)
Classi statiche annidate.
Nel tutorial precedente, abbiamo discusso delle classi interne. Se desideri sapere di più sulle classi interne, visitaClasse annidata Java.
In questo tutorial, impareremo le classi statiche annidate.
Usiamo la parola chiave static per rendere la nostra classe annidata statica.
Attenzione:In Java, è permesso che le classi annidate siano statiche.
Come le classi convenzionali, le classi annidate statiche possono contenere contemporaneamente campi e metodi statici e non statici. Ad esempio:
Class Animal { static class Mammal { // Membri statici e membri statici della classe Mammal } // Membri della classe Animal }
La classe annidata statica è associata alla classe esterna.
Per accedere alle classi annidate statiche, non è necessario un oggetto dell'oggetto della classe esterna.
class Animal { // Classi interne class Reptile { public void displayInfo() { System.out.println("Io sono un rettile."); } } // Classi statiche static class Mammal { public void displayInfo() { System.out.println("Io sono un mammifero."); } } } class Main { public static void main(String[] args) { // Creazione di oggetti della classe esterna Animal animal = new Animal(); // Creazione di oggetti di classi non statiche Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // Creazione di oggetti di classi annidate statiche Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); } }
Risultato di output
Io sono un rettile. Io sono un mammifero.
Nel programma sopra, abbiamo due classi annidate Mammal e Reptile nella 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()
In Java, le classi annidate statiche sono collegate alla classe esterna. Ecco perché le classi annidate statiche possono accedere solo ai membri della classe esterna (campi statici e metodi).
Vediamo cosa accade se proviamo ad accedere ai campi e ai metodi non statici di una classe esterna.
class Animal { static class Mammal { public void displayInfo() { System.out.println("Io sono un mammifero."); } } class Reptile { public void displayInfo() { System.out.println("Io sono un rettile."); } } public void eat() { System.out.println("Io mangio cibo."); } } 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(); } }
Risultato di output
Main.java:28: errore: simbolo non trovato mammal.eat(); ^ simbolo: metodo eat() location: variabile mammal di tipo Mammal 1 errore stato di uscita del compilatore 1
Nell'esempio sopra, abbiamo creato un metodo non statico eat() nella classe Animal.
Ora, se proviamo ad accedere al metodo eat() utilizzando l'oggetto mammal, il compilatore mostrerà un errore.
Questo è perché mammal è un oggetto di classe statica, quindi non possiamo accedere ai metodi non statici da una classe statica.
Come sopra menzionato, solo le classi annidate possono essere statiche. Non possiamo avere classi di livello superiore statiche.
Vediamo cosa succede se proviamo a rendere statica una classe di livello superiore.
static class Animal { public static void displayInfo() { System.out.println("Sono un animale"); } } class Main { public static void main(String[] args) { Animal.displayInfo(); } }
Risultato di output
Main.java:1: errore: il modificatore static non è permesso qui static class Animal { ^ 1 errore stato di uscita del compilatore 1
Nell'esempio sopra, abbiamo tentato di creare una classe statica Animal. Poiché Java non consente l'uso di classi top-level statiche, si verificherà un errore.